2013-06-01 38 views
8

Khi sử dụng chỉ thị #warning, thay vì một cảnh báo tôi nhận được hai - số tôi tạo, cộng thêm warning: #warning is a GCC extension [enabled by default] bổ sung.Làm thế nào để vô hiệu hóa cảnh báo GCC về chỉ thị #warning là một phần mở rộng GCC?

Tôi có thể chặn chính kết quả #warning của chỉ thị, với -Wno-cpp, nhưng điều đó ngược lại với những gì tôi muốn.

Tôi có thể giải quyết vấn đề này bằng cách thay vì sử dụng #pragma message() nhưng điều đó dường như làm cho chỉ thị #warning khá vô nghĩa - không có cách nào để ngăn chặn cảnh báo cảnh báo này?

+1

Các tùy chọn bạn đang chuyển đến GCC là gì? –

+0

Đó là '-g -static -static-libgcc -Wall -Wextra -pedantic -Wno-vla -Wsizeof-pointer-memaccess -Wmissing-declarationations -march = native -fexceptions -fexpensive-optimizations -flto -O3 -std = C++ 1y -fsanitize = address' trong trường hợp này - xem câu trả lời của tôi bên dưới, tôi nhận ra đó là tùy chọn -pantic chịu trách nhiệm. – Riot

Trả lời

3

Ah, có vẻ như tùy chọn -pedantic cho phép cảnh báo này và dường như không có ghi đè cụ thể cho nó, vì có hầu hết các cảnh báo GCC khác. Xóa -pedantic sẽ loại bỏ cảnh báo về cảnh báo.

0
#ifdef __GNUC__ 
#warning "no warning here!" 
#endif 

sẽ biên dịch có hoặc không có gcc, ngay cả với -pedantic, nhưng nó vẫn sẽ cung cấp cho các cảnh báo, (và thất bại nếu cảnh báo được leo thang đến sai sót).

UPDATE: Theo this related question, không có giải pháp sạch để chọn lọc vô hiệu hóa các cảnh báo về #pragma s gnu-cụ thể

+0

Chắc chắn nó sẽ biên dịch, trong mọi trường hợp, nhưng điều đó không làm bất cứ điều gì để thoát khỏi cảnh báo: 'warning: #warning là một phần mở rộng GCC [được kích hoạt theo mặc định]' – Riot

+0

Vâng, tôi chỉ nhận ra rằng bản thân mình. Tìm kiếm một pragma một cách tinh tế để thề điều chết tiệt đó. (thêm '#pragma GCC bị bỏ qua" -Wunknown-pragmas "" dường như không hoạt động.) – wildplasser

0

Trên thực tế, sau đây nên làm việc. Với điều đó bạn có thể ngăn chặn/bỏ qua các cảnh báo gcc.

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wcpp" 

... 

#pragma GCC diagnostic pop 
+2

Mặc dù đây là một ý tưởng hay, tôi sợ điều này sẽ không hoạt động với các cảnh báo -pantic. Xem mã thử nghiệm tại đây: http://coliru.stacked-crooked.com/view?id=53358c525169b7c2750ed1eb09dff702-0f11904895a20602a6e5ca9f4b5b0039 – Riot

Các vấn đề liên quan