2010-01-26 34 views
19

Khi sử dụng sprintf, trình biên dịch cảnh báo tôi rằng chức năng không được chấp nhận.Thêm cảnh báo trình biên dịch của riêng tôi

Tôi làm cách nào để hiển thị cảnh báo trình biên dịch của riêng mình?

+1

gì sprintf bị phản đối phải làm gì với câu hỏi này? –

+0

Chỉ là một ví dụ về một cảnh báo trình biên dịch được đưa vào bởi một "người dùng" và không hoàn toàn được tạo bởi trình biên dịch. – Warpin

Trả lời

19

Trong Visual Studio,

#pragma message ("Warning goes here")

Trên một mặt lưu ý, nếu you want to suppress such warnings, tìm ID cảnh báo trình biên dịch (đối với cảnh báo phản đối, đó là C4996) và chèn dòng này:

#pragma warning(disable : 4996)

+0

Điều này không làm chính xác những gì Martin muốn, mặc dù - ông muốn cảnh báo được ban hành khi chức năng được _used_, không phải khi nó được biên soạn. –

+0

Tôi đoán câu hỏi của tôi có thể đã được đọc một trong hai cách (xin lỗi cho điều đó!), Nhưng điều này là một trong những gì tôi đang tìm kiếm. – Warpin

12

Để đánh dấu một hàm không được chấp nhận, hãy sử dụng __declspec(deprecated), ví dụ:

__declspec(deprecated) void f(); 
+1

Tôi nghĩ rằng đây là những gì OP thực sự muốn – LiraNuna

+2

Ông yêu cầu hiển thị cảnh báo của riêng mình, không phải là một cảnh báo * không được sử dụng * cụ thể –

18

Mặc dù không có tiêu chuẩn #warning directice, nhiều trình biên dịch (bao gồm GCC, VC, Intels và Táo), hỗ trợ #warning message.

#warning "this is deprecated" 

Thường thì nó là tốt hơn để không chỉ mang đến một cảnh báo (mà mọi người có thể bỏ qua), nhưng để cho biên soạn thất bại hoàn toàn, sử dụng #error chỉ thị (đó là tiêu chuẩn):

#if !defined(FOO) && !defined(BAR) 
# error "you have neither foo nor bar set up" 
#endif 
+6

MSVC++ 2013 không hỗ trợ nó –

+0

Không thể thấy rằng nó hoạt động trong MSVC++ 2015 hoặc 2017 hoặc – Zitrax

6

Trong VC nếu bạn muốn cảnh báo hiển thị trong số cảnh báo vào cuối biên soạn, bạn cần sử dụng định dạng này:

#pragma message(": warning<put what you like here>: blah blah blah") 

Trình tự quan trọng là: dấu hai chấm, dấu cách, "wa rning ", một cái gì đó hoặc không có gì, đại tràng", văn bản cảnh báo của bạn "

Nếu bạn muốn được ưa thích thì tệp và số dòng có thể được thêm trước dấu hai chấm đầu tiên để bạn có thể nhấp đúp vào nó để chuyển đến mã (từ microsoft.com)):

// pragma_directives_message1.cpp 
// compile with: /LD 
#if _M_IX86 >= 500 
#pragma message("_M_IX86 >= 500") 
#endif 

#pragma message("") 

#pragma message("Compiling " __FILE__) 
#pragma message("Last modified on " __TIMESTAMP__) 

#pragma message("") 

// with line number 
#define STRING2(x) #x 
#define STRING(x) STRING2(x) 

#pragma message (__FILE__ "[" STRING(__LINE__) "]: test") 

#pragma message("") 
+0

Cảm ơn - đã cập nhật và sao chép nó vào - Tôi nghĩ đó là cùng một trang, nhưng điều này đã được một thời gian trước đây! – noelicus

0

tôi nghĩ rằng điều này sẽ làm việc

void foo() __attribute__ ((deprecated("This function is deprecated. \nFor further information please refer to the README"))); 
Các vấn đề liên quan