2010-01-26 28 views
19

使用sprintf時,編譯器會警告我該函數已被棄用。添加我自己的編譯器警告

如何顯示我自己的編譯器警告?

+1

什麼是被棄用的sprintf有這個問題呢? – 2010-01-26 23:16:30

+0

只是一個編譯器警告的例子,它是由一個「用戶」放入的,而不是純粹由編譯器生成的。 – Warpin 2010-01-27 01:22:27

回答

19

Visual Studio

#pragma message ("Warning goes here")

在一個側面說明,如果you want to suppress such warnings,找到編譯器警告標識(不推薦使用的警告,這是C4996)並插入該行:

#pragma warning(disable : 4996

+0

但是,這並不是馬丁想要的,他希望在函數被_used_時發出警告,而不是在編譯時發出警告。 – 2010-01-26 23:06:15

+0

我猜我的問題可能會被讀取(對不起!),但這是我正在尋找的。 – Warpin 2010-01-26 23:16:01

12

要將某個功能標記爲不建議使用,請使用__declspec(deprecated),例如,

__declspec(deprecated) void f(); 
+1

我想這是OP真正想要的 – LiraNuna 2010-01-26 23:06:06

+2

他要求顯示他自己的警告,而不是一個特定的*棄用的*警告 – 2010-01-26 23:10:09

18

雖然沒有標準#warning directice,許多編譯器(包括GCC,VC,英特爾和蘋果),支持#warning message

#warning "this is deprecated" 

往往更好,不僅帶來了一個警告(人們可以忽略),而是讓編譯完全失敗,使用#error指令(這是標準):

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

MSVC++ 2013不支持它 – 2015-08-14 10:35:31

+0

看不到它的工作原理在MSVC++ 2015或2017 – Zitrax 2017-10-03 11:37:07

6

在VC,如果你想警告,在警告數在編譯結束顯示你需要使用這種格式:

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

重要的順序是:冒號,空格,「WA你的警告文字

如果你想要看起來那麼文件和行號可以添加在第一個冒號之前,所以你可以雙擊它跳轉到代碼(從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

謝謝 - 已更新並複製它 - 我認爲它是相同的頁面,但這是前一陣子! – noelicus 2017-06-23 10:54:21

0

我認爲這應該工作

void foo() __attribute__ ((deprecated("This function is deprecated. \nFor further information please refer to the README")));