【发布时间】:2010-01-26 22:59:22
【问题描述】:
使用 sprintf 时,编译器会警告我该函数已弃用。
如何显示我自己的编译器警告?
【问题讨论】:
-
sprintf 被弃用与这个问题有什么关系?
-
只是一个编译器警告的例子,它是由“用户”输入的,而不是纯粹由编译器生成的。
标签: c++ windows visual-c++
使用 sprintf 时,编译器会警告我该函数已弃用。
如何显示我自己的编译器警告?
【问题讨论】:
标签: c++ windows visual-c++
#pragma message ("Warning goes here")
附带说明,如果是 you want to suppress such warnings,请找到编译器警告 ID(对于已弃用的警告,它是 C4996)并插入以下行:
#pragma warning( disable : 4996)
【讨论】:
虽然没有标准的#warning指令,但很多编译器(包括GCC、VC、Intels和Apples)都支持#warning message。
#warning "this is deprecated"
通常最好不要只提出警告(人们可以忽略),而是让编译完全失败,使用 #error 指令(这是标准的):
#if !defined(FOO) && !defined(BAR)
# error "you have neither foo nor bar set up"
#endif
【讨论】:
要将函数标记为已弃用,请使用__declspec(deprecated),例如
__declspec(deprecated) void f();
【讨论】:
[[deprecated]] void f();
在 VC 中,如果您希望警告在编译结束时显示在警告计数中,您需要使用以下格式:
#pragma message(": warning<put what you like here>: blah blah blah")
重要的顺序是:冒号、空格、“警告”、有或无、冒号、“您的警告文本”
如果你想花哨的话,可以在第一个冒号之前添加文件和行号,这样你就可以双击它跳转到代码(来自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("")
【讨论】:
我认为这应该可行
void foo () __attribute__ ((deprecated("This function is deprecated. \nFor further information please refer to the README")));
【讨论】: