vô hiệu hóa cảnh báo cụ thể trong flycheck (cụ thể là #pragma một lần trong tập tin chính)


11

Tôi đang sử dụng flycheck để phát triển C ++ và nhận được cảnh báo sau:

#pragma once in main file

Trong tất cả các tiêu đề bao gồm trong một tập tin chính. Tìm kiếm trên web, tôi có ấn tượng rằng điều này có liên quan đến cách gcc và clang (cả hai đưa ra cùng một cảnh báo) biên dịch cho flymake.

Tôi muốn thoát khỏi cảnh báo này. Có bất cứ điều gì tôi có thể làm?


Sẽ dễ dàng hơn để tìm ra cách loại bỏ cảnh báo này nếu chúng ta có thể sao chép nó trước. Bạn có thể đưa ra một tệp ví dụ hoặc các tệp thể hiện vấn đề, trong khi vẫn đơn giản như bạn có thể tạo ra chúng không?
Ben Liblit

Tôi có một câu hỏi tương tự như của bạn, tôi có một câu trả lời .
Pradana Aumars

Câu trả lời:


2

Clang có một tùy chọn để vô hiệu hóa cảnh báo này. Thêm phần sau vào cấu hình của tôi đã khắc phục sự cố cho tôi.

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

Thật không may, tôi không biết nếu tùy chọn tương tự tồn tại cho gcc.


0

Hiện tại GCC không có cách nào để ngăn chặn cảnh báo này. Và flycheck không có cách nào để bỏ qua lỗi mà không chạm vào bên trong của nó.

Đây là một bản hack hoạt động cho 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))

Để đầy đủ, câu trả lời của @ grepcake cho tiếng kêu:

; ignore clang "#pragma once" warning
(with-eval-after-load "flycheck"
  (setq flycheck-clang-warnings `(,@flycheck-clang-warnings
                                  "no-pragma-once-outside-header")))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.