2012-10-15 29 views
6

Làm thế nào để loại bỏ cảnh báo GCC trên #pragma region? Tôi đã thêm pragma region để dễ dàng xem mã nhưng báo cáo cảnh báo trên #pragma region. Tôi đang sử dụng Visual Studio 2010.Làm thế nào để loại bỏ cảnh báo GCC trên vùng #pragma?

+4

bạn đang biên soạn với GCC trong Visual Studio 2010? – logoff

+0

Đọc hữu ích: http://dbp-consulting.com/tutorials/SuppressingGCCWarnings.html – altendky

+0

Đề xuất của tôi: Tái cấu trúc mã. Biến vùng thành các hàm riêng biệt. – user877329

Trả lời

6

Không sử dụng nó trên GCC? :)

Giải pháp đơn giản nhất tôi có thể nghĩ ra vào lúc này là sử dụng các điều kiện tiền xử lý cho nó:

#ifndef __GNUC__ 
#pragma region 
#endif 

// Stuff... 

#ifndef __GNUC__ 
#pragma endregion 
#endif 

Không rất đẹp trai hay có thể đọc được, nhưng sẽ làm cho mã biên dịch mà không cần cảnh báo về GCC.

+0

Có thể dễ dàng được macro'ed cho dễ đọc – altendky

+1

@altendky Tôi không chắc chắn về nó, vì nó được sử dụng bởi trình soạn thảo Visual Studio để biểu thị các vùng có thể được gấp lại. Nó phụ thuộc vào trình phân tích cú pháp trình soạn thảo Visual Studio tốt như thế nào. –

+6

@altendky - Làm cách nào? một '#' đơn (trái ngược với '##') bên trong danh sách * thay thế của macro * không xác định một chỉ thị tiền xử lý. Thay vào đó là toán tử xâu chuỗi. Điều sau toán tử '#' phải là tên tham số macro. –

8

gcc có cờ cảnh báo này:

-Wunknown-pragmas Cảnh báo khi một chỉ thị #pragma đang gặp phải mà không hiểu bởi GCC. Nếu tùy chọn dòng lệnh này được sử dụng, cảnh báo sẽ thậm chí được phát hành cho các pragmas không xác định trong các tệp tiêu đề hệ thống. Đây là không phải trường hợp nếu cảnh báo chỉ được bật bởi tùy chọn dòng lệnh -Wall.

Và như thường lệ, bạn có thể phủ nhận điều đó, nghĩa là pragmas không xác định sẽ không được cảnh báo. Tức là, sử dụng -Wno-unknown-pragmas.

Lưu ý rằng -Wno-unknown-pragmas phải đến sau bất kỳ cờ dòng lệnh nào bật cảnh báo này, chẳng hạn như -Wall - điều này cũng vô hiệu hóa cảnh báo trên tất cả các pragmas không xác định.

+3

Chỉ để được pedantic, tùy chọn này tắt cảnh báo cho _all_ pragmas, nó không thể chọn và chọn pragmas nên tạo ra cảnh báo và không nên. –

+0

Có, @JoachimPileborg, và chẩn đoán này ('unknown-pragmas') đôi khi có thể cứu sống, nếu bạn lộn xộn với 'pompmas' hoặc tương tự ... –

4
#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wunknown-pragmas" 
... Code using Unknown pragmas ... 
#pragma GCC diagnostic pop 
+1

Vì bạn cũng đang xây dựng trên Windows bạn có thể muốn để bọc nó trong: #ifdef __GNUC__ – Eric

3

Nó có vẻ là một pragma cụ MSVC, vì vậy bạn nên sử dụng

#ifdef _MSC_VER 
#pragma region 
#endif 

<code here> 

#ifdef _MSC_VER 
#pragma endregion 
#endif 
Các vấn đề liên quan