flycheck에서 특정 경고를 비활성화합니다 (특히 "#pragma once in main file")


11

C ++ 개발에 flycheck를 사용하고 있으며 다음 경고가 표시됩니다.

#pragma once in main file

기본 파일에 포함 된 모든 헤더 웹을 검색하면 gcc와 clang (둘 다 동일한 경고를 표시 함)이 flymake를 컴파일하는 방식과 관련이 있다는 인상을받습니다.

이 경고를 제거하고 싶습니다. 제가 뭔가할만한 일이 있을까요?


이 경고를 먼저 재현 할 수 있다면이 경고 를 억제 하는 방법을 알아내는 것이 더 쉬울 것 입니다. 문제를 나타내는 파일이나 예제 파일을 만들 수있는 것처럼 간단하게 만들 수 있습니까?
Ben Liblit

나는 당신과 비슷한 질문이, 나는이 대답을 .
Pradana Aumars

답변:


2

Clang에는이 경고를 비활성화하는 옵션이 있습니다. 내 구성에 다음을 추가하면 문제가 해결되었습니다.

(with-eval-after-load "flycheck"
    (setq flycheck-clang-warnings `(,@flycheck-clang-warnings
                                    "no-pragma-once-outside-header")))

불행히도 gcc에 비슷한 옵션이 있는지 모르겠습니다.


0

현재 GCC는이 경고를 억제 할 방법이 없습니다. 그리고 flycheck는 내부를 건드리지 않고 오류를 무시할 수있는 방법이 없습니다.

다음은 gcc에서 작동하는 해킹입니다.

; ignore gcc "#pragma once" warning
(with-eval-after-load "flycheck"
  (eval-when-compile (require 'flycheck))  ; for flycheck-error struct
  (defun my-filter-pragma-once-in-main (orig-fun errors)
    (dolist (err errors)
      (-when-let (msg (flycheck-error-message err))
        (setf (flycheck-error-message err)
              (if (string-match-p "#pragma once in main file" msg) nil msg))))
    (funcall orig-fun errors))
  (advice-add 'flycheck-sanitize-errors :around #'my-filter-pragma-once-in-main))

완전성을 위해 clang에 대한 @grepcake의 답변 :

; ignore clang "#pragma once" warning
(with-eval-after-load "flycheck"
  (setq flycheck-clang-warnings `(,@flycheck-clang-warnings
                                  "no-pragma-once-outside-header")))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.