отключить специальное предупреждение в flycheck (в частности, «#pragma один раз в основном файле»)


11

Я использую flycheck для разработки на C ++ и получаю следующее предупреждение:

#pragma once in main file

Во всех заголовках, включенных в основной файл. Просматривая сети, у меня складывается впечатление, что это как-то связано с тем, как gcc и clang (оба дают одно и то же предупреждение) компилируют для flymake.

Я хотел бы избавиться от этого предупреждения. Что я могу сделать?


Будет легче понять, как подавить это предупреждение, если мы сможем воспроизвести его первым. Можете ли вы привести файл примера или файлы, в которых обнаружена проблема, но при этом все так же просто, как вы можете их сделать?
Бен Либлит

У меня есть вопрос, похожий на ваш, у меня есть ответ .
Прадана Аумарс

Ответы:


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))

Для полноты ответ @ grepcake для clang:

; ignore clang "#pragma once" warning
(with-eval-after-load "flycheck"
  (setq flycheck-clang-warnings `(,@flycheck-clang-warnings
                                  "no-pragma-once-outside-header")))
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.