cảnh báo: #pragma một lần trong tệp chínhCó thể tắt cảnh báo này trong tiếng kêu không? cảnh báo: #pragma một lần trong tệp chính
Chúng tôi đang chạy tiêu đề của chúng tôi thông qua clang để có được một phần AST.
Có thể tắt cảnh báo đó không?
cảnh báo: #pragma một lần trong tệp chínhCó thể tắt cảnh báo này trong tiếng kêu không? cảnh báo: #pragma một lần trong tệp chính
Chúng tôi đang chạy tiêu đề của chúng tôi thông qua clang để có được một phần AST.
Có thể tắt cảnh báo đó không?
Không có tùy chọn để kiểm soát nó, do đó, chỉ cần cấm cảnh báo này trong mã của bạn.
Không có tùy chọn -W
cho "#pragma một lần trong tệp chính", vì vậy, bạn không thể tắt tùy chọn này thông qua các phương tiện thông thường. (Tuy nhiên, các nhà phát triển Clang rất ý thức được rằng những cảnh báo mà không -W
tùy chọn mút, và có một quy tắc chung mà mới cảnh báo luôn được -W
tùy chọn. Dọn dẹp mã cũ, không may, là trái như một bài tập cho thất vọng . users)
Nếu bạn không nhớ hackery vỏ, bạn có thể luôn luôn làm một cái gì đó như thế này:
# This gives the warning...
clang -c myheader.h
# ...This doesn't.
echo '#include "myheader.h"' | clang -c -x c++-header -o myheader.h.gch -
Các trailing -
, như thường lệ, có nghĩa là "đọc từ stdin". -x c++
cho Clang biết bạn đang sử dụng ngôn ngữ nào (vì nó không thể nói từ phần mở rộng của tệp khi có là không có tệp) và thay đổi c++
thành c++-header
có nghĩa là chúng tôi muốn tạo tệp .gch thay vì. tập tin.
Hai tệp .gch
do đó được tạo ra là NOT bit-cho-bit giống nhau. Tôi không biết đủ về các tệp gch để cho bạn biết những gì có thể quan sát khác nhau về hành vi của họ. Tuy nhiên, vì tất cả những gì bạn quan tâm là AST của Clang, tôi cá là bạn sẽ ổn với nó. :)
Tôi đã có điều này khi tôi vô tình bao gồm một tệp tiêu đề trong các nguồn biên dịch (tiêu đề này có #pragma một dòng). Để khắc phục tiêu đề xóa này khỏi các nguồn biên dịch (và có thể bạn cần thay thế nó bằng tệp .cpp)
Sử dụng tùy chọn -w
(viết thường w
không viết hoa W
) khi biên dịch nguồn để chặn cảnh báo như vậy.
Tôi có thể xác nhận rằng nó hoạt động với gcc 5.4 – Julian
Đây là vấn đề tôi gặp phải vì tôi đã sử dụng $^trong tệp makefile của mình làm lối tắt. – VaelynPhi