flycheckで特定の警告を無効にします(特に、「#pragma once in main file」)


11

C ++開発にflycheckを使用していて、次の警告が表示されます。

#pragma once in main file

メインファイルに含まれるすべてのヘッダー。ウェブを検索すると、これはgccとclang(どちらも同じ警告を出す)がflymake用にコンパイルされる方法と関係があるように見えます。

この警告を取り除きたいのですが。何か私にできることはありますか?


この警告を最初に再現できれば、この警告を抑制する方法がわかりやすくなります。あなたがそれらを作ることができるのと同じくらい簡単でありながら、問題を示すサンプルファイルを与えることができますか?
Ben Liblit 2015年

あなたに似た質問があります答えあります
Pradana Aumars、2018

回答:


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.