2011-04-28 25 views
8

Gcc (hoặc bất kỳ trình biên dịch nào khác) có tùy chọn cảnh báo cho tôi các ô nhiễm không gian tên toàn cầu không?Có cách nào để cảnh báo tôi về các ô nhiễm không gian tên toàn cầu không?

tôi đã cố gắng để biên dịch một bộ ứng dụng mẫu, nhưng nó bật ra khá một vài trong số các tập tin tiêu đề của mẫu được bị ảnh hưởng với ô nhiễm không gian tên toàn cầu (using namespace trong các tập tin tiêu đề), vì vậy mà Mac OS X toàn cầu struct Rect trở thành mơ hồ. Tôi cũng đã cố gắng thay đổi thứ tự #include để giải quyết biểu tượng Rect của hệ thống trước bãi mìn của using namespace, nhưng điều đó khiến một số biểu tượng không được giải quyết.

Tìm kiếm trước đó của tôi bằng cách sử dụng Google không thành công, mặc dù có lỗi, nếu loại tùy chọn cảnh báo đó tồn tại, vui lòng cung cấp cho tôi thông tin.

+1

tìm kiếm và xóa - những sự cố này thường tồn tại/trả lại cho đến khi bị xóa. – justin

+0

@Justin: Vấn đề là, có thể có các trường hợp 'sử dụng không gian tên' không có trong không gian tên chung. – Potatoswatter

+0

@Potatoswatter tôi không * có ý định * ngụ ý rằng mọi khai báo 'using' sẽ bị xóa; chỉ những người toàn cầu (chủ đề của OP). – justin

Trả lời

3

Tôi không biết về gcc, nhưng Clang có nó:

def warn_using_directive_in_header : Warning< 
    "using namespace directive in global context in header">, 
    InGroup<HeaderHygiene>, DefaultIgnore; 

Bạn có thể kích hoạt nó trực tiếp sử dụng -Wusing-directive-in-header hoặc thông qua các nhóm -Wheader-hygiene (đó là, bây giờ, thành viên duy nhất của nhóm) .

Bài đánh giá được xem xét kỹ lưỡng trên danh sách gửi thư và thường không cảnh báo về các trường hợp thông thường.

+0

Hmm, có vẻ như tùy chọn cảnh báo này đã được giới thiệu gần đây. Các tùy chọn cảnh báo này không hoạt động đối với "Apple clang phiên bản 2.0" và gcc-4.2.1 cho Xcode 4.0.1 (/ Developer/usr/bin/clang và như vậy). Tôi mong đợi tương tự cho Xcode 3.2. Nhưng chắc chắn là một tính năng thú vị. Nên được kết hợp với gcc. – Shigerello

+0

@Shigerello: gần đây, tôi thậm chí không chắc nó có mặt trong bản phát hành mới nhất của CLang (2.9) hay không. –

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