2013-04-14 32 views
7

Tôi đã học được rằng tôi có thể đặtGCC, C: Tìm hiểu tên các cảnh báo mặc định để sử dụng trong #pragma bỏ qua

#pragma GCC diagnostic ignored "<warning>" 

lên đỉnh của một tập tin nguồn để ngăn chặn cảnh báo liên quan đến đặc biệt này tệp nguồn. Tuy nhiên, có vẻ như một số tên không đủ cụ thể. Ví dụ:

#pragma GCC diagnostic ignored "-Wwrite-strings" 

không ngăn không cho gcc (4.7.2) hiển thị thông báo cảnh báo có tên chính xác, thay vào đó, các thông điệp này chỉ được theo sau bởi [được bật theo mặc định]. Tôi đoán tôi cần phải biết tên cảnh báo chính xác để tôi có thể sử dụng chúng trong dòng #pragma. Tôi đã thử

-fdiagnostics-show-option, 

nhưng cảnh báo sau đó vẫn được hiển thị là [được bật theo mặc định].

Có cách nào để xác định các cảnh báo này hoặc ngăn chặn các cảnh báo liên quan đến tệp nguồn cụ thể không?

Cảm ơn bạn rất nhiều!

+0

Tôi tin rằng sự lựa chọn đúng để sử dụng là '-Wno-ghi-strings' – Bechir

+0

Nếu tôi không nhầm, đây là một lựa chọn trình biên dịch mà vô hiệu hóa tất cả các cảnh báo tương ứng trên toàn cầu. Những gì tôi muốn làm là vô hiệu hóa chỉ cảnh báo được gây ra bởi một số tập tin nguồn. Đó là lý do tại sao tôi đã thử phương pháp '# pragma'. Nhưng cảm ơn bạn anyway! – Guybrush

Trả lời

2

Bạn phải đẩy và bật các trạng thái chẩn đoán. Như thế này:

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wunused-function" 
    /* ignoring warning */ 

    int unused_function(void) { 
     return 1337; 
    } 
#pragma GCC diagnostic pop 
+0

Vì vậy, tôi đã đặt tất cả các chức năng của tệp nguồn của tôi giữa các pragmas như được hiển thị bởi bạn, với '-Wwrite-strings'. Tuy nhiên, nó không ngăn chặn các cảnh báo đến từ tệp này được gắn nhãn 'được bật theo mặc định'. – Guybrush

+0

Bạn có thể chia sẻ thêm thông tin về dòng lệnh gcc của bạn (ví dụ: -Wall, -pedantic, et cetera) không? Cảnh báo chính xác bạn đang nhận được là gì? –

+0

Tôi đã sử dụng '-pantic -Wall -Wshadow -Wpointer-arith -Wwrite-strings'. Nếu tôi không làm bất cứ điều gì, tôi nhận được cảnh báo có nhãn '-Wshadow',' -Wunused-variable', '-Wimplicit-function-declaration' và' enabled by default'. Đặt '#pragma GCC chẩn đoán igonred" "' lên đầu các tệp nguồn có liên quan, tôi có thể loại bỏ ba loại cảnh báo đầu tiên, nhưng tôi không biết cách xử lý 'được bật theo mặc định' cảnh báo đến từ các tệp nguồn đó. – Guybrush

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