2009-02-08 11 views
29

Tôi đã bắt đầu một dự án mới và đã quyết định đảm bảo dự án được xây dựng sạch sẽ với tùy chọn/Tường được bật. Vấn đề duy nhất không phải là tất cả các thư viện của bên thứ 3 (như tăng) biên dịch mà không cần cảnh báo, vì vậy tôi đã viện để làm điều này trong một tiêu đề chia sẻ:Có cách nào để vô hiệu hóa tất cả cảnh báo bằng pragma không?

#pragma warning(push) 

#pragma warning(disable:4820) 
#pragma warning(disable:4619) 
#pragma warning(disable:4668) 
#pragma warning(disable:4625) 
#pragma warning(disable:4626) 
#pragma warning(disable:4571) 
#pragma warning(disable:4347) 
#pragma warning(disable:4640) 
#pragma warning(disable:4365) 
#pragma warning(disable:4710) 
#pragma warning(disable:4820) 
#pragma warning(disable:4350) 
#pragma warning(disable:4686) 
#pragma warning(disable:4711) 
#pragma warning(disable:4548) 

#include <boost/array.hpp> 
#include <boost/assert.hpp> 
#include <boost/assign.hpp> 
#include <boost/bind.hpp> 
#include <boost/lexical_cast.hpp> 
#include <boost/filesystem.hpp> 
#include <boost/foreach.hpp> 
#include <boost/format.hpp> 
#include <boost/function.hpp> 
#include <boost/integer.hpp> 
#include <boost/optional.hpp> 
#include <boost/regex.hpp> 
#include <boost/smart_ptr.hpp> 
#include <boost/algorithm/string.hpp> 
#include <boost/tuple/tuple.hpp> 
#include <boost/utility.hpp> 
#include <boost/variant.hpp> 

#pragma warning(pop) 

này hoạt động tốt đủ, nhưng mỗi khi tôi thêm tiêu đề tăng mới Tôi phải thêm bất kỳ cảnh báo nào họ tạo ra vào danh sách. Có cách nào để nói vô hiệu hóa tất cả các cảnh báo cho đoạn mã này?

Trả lời

40

Bạn có thể đẩy/bật một mức độ thấp của cảnh báo, như thế này:

#pragma warning(push, 0)   

#include <boost/bind.hpp> 
#include <boost/shared_ptr.hpp> 
// ... 

#pragma warning(pop) 

Nhưng biết rằng nó không thể vô hiệu hóa tất cả cảnh báo. Ví dụ: một số cảnh báo liên kết không thể tắt.

+0

Tôi không có ý bỏ qua chiêu hồn nhưng trong bình luận của bạn ở đây tôi thấy một 1-to-1 mối quan hệ với push/pop cảnh báo. Nếu tôi vô hiệu hóa cảnh báo N, tôi có cần gọi số lần N lần nữa không? Một lần nữa, xin lỗi để hồi sinh một chủ đề cũ. – wheaties

+2

Số lượng cảnh báo bạn vô hiệu hóa không liên quan. Số lượng 'push' phải khớp với số lượng 'pops' đó là tất cả. –

+2

Ngoài ra, điều thú vị là nếu '#pragma warning (pop)' được sử dụng, một số cảnh báo (4514 là một ví dụ) vẫn sẽ được phát hành, có thể vì các điều kiện cảnh báo này được phát hiện trong một số ngữ cảnh sau khi biên dịch. – alecov

4

Những gì tôi đã làm trước đó được thiết lập "W3" tùy chọn hơn là "tường" thì trong mỗi file nguồn cpp riêng của tôi, tôi đặt

#pragma warning(push, 4) 

ở đầu SAU tất cả các "#include ... "lines and then

#pragma warning(pop) 

làm dòng cuối cùng của tệp.

Bằng cách này, bạn sẽ nhận được cảnh báo cấp 4 trong mã của bạn và cấp 3 ở mã bên thứ 3 mà bạn không thể làm gì cả.

+1

Có vẻ như có nhiều công việc hơn để bao bọc tất cả các tệp mã của riêng bạn với chỉ thị '#pragma warning' hơn là chỉ quấn bên thứ ba vi phạm' # include'. Nhưng nếu nó làm việc cho bạn ... –

17
#pragma warning(disable:4820) 
#pragma warning(disable:4619) 
#pragma warning(disable:4668) 

cho dòng ít ....

#pragma warning (disable : 4820 4619 4668)