deshabilitar advertencias específicas en flycheck (específicamente "#pragma una vez en el archivo principal")


11

Estoy usando flycheck para el desarrollo de C ++ y recibo la siguiente advertencia:

#pragma once in main file

En todos los encabezados incluidos en un archivo principal. Al buscar en las webs, tengo la impresión de que esto tiene algo que ver con la forma en que gcc y clang (ambos dan la misma advertencia) compilan para flymake.

Me gustaría deshacerme de esta advertencia. ¿Hay algo que pueda hacer?


Será más fácil descubrir cómo suprimir esta advertencia si podemos reproducirla primero. ¿Puede dar un archivo de ejemplo o archivos que exhiban el problema, sin dejar de ser tan simple como puede hacerlos?
Ben Liblit

Tengo una pregunta similar a la tuya, tengo una respuesta .
Pradana Aumars

Respuestas:


2

Clang tiene una opción para deshabilitar esta advertencia. Agregar lo siguiente a mi configuración solucionó el problema para mí.

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

Desafortunadamente, no sé si existe una opción similar para gcc.


0

Actualmente GCC no tiene forma de suprimir esta advertencia. Y flycheck no tiene forma de ignorar los errores sin tocar sus partes internas.

Aquí hay un truco que funciona para 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))

Para completar, la respuesta de @ grepcake para clang:

; ignore clang "#pragma once" warning
(with-eval-after-load "flycheck"
  (setq flycheck-clang-warnings `(,@flycheck-clang-warnings
                                  "no-pragma-once-outside-header")))
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.