添加我自己的编译器警告
Posted
技术标签:
【中文标题】添加我自己的编译器警告【英文标题】:Add my own compiler warning 【发布时间】:2010-01-26 22:59:22 【问题描述】:使用 sprintf 时,编译器会警告我该函数已弃用。
如何显示我自己的编译器警告?
【问题讨论】:
sprintf 被弃用与这个问题有什么关系? 只是一个编译器警告的例子,它是由“用户”输入的,而不是纯粹由编译器生成的。 Create custom #warning flags的可能重复 【参考方案1】:在Visual Studio,
#pragma message ("Warning goes here")
附带说明,如果是 you want to suppress such warnings,请找到编译器警告 ID(对于已弃用的警告,它是 C4996
)并插入以下行:
#pragma warning( disable : 4996
)
【讨论】:
我想我的问题可能会被读到任何一种方式(对不起!),但这就是我要找的。span> 【参考方案2】:虽然没有标准的#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
【讨论】:
MSVC++2013 不支持。 看不到它在 MSVC++2015 或 2017 中也可以工作。【参考方案3】:要将函数标记为已弃用,请使用__declspec(deprecated)
,例如
__declspec(deprecated) void f();
【讨论】:
我认为这是 OP 真正想要的。 他要求显示他自己的警告,而不是具体的已弃用警告。 或者在c++14中,我们必须使用[[deprecated]] void f();
链接失效【参考方案4】:
在 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("")
【讨论】:
这也适用于 gcc,其中 "#error" 有效,但不幸的是 "#warning" 无效。但它总是会输出一个“note:”引用,因此输出过滤器可能不会将消息捕获为错误。我们仍然没有完美的解决方案。【参考方案5】:我认为这应该可行
void foo () __attribute__ ((deprecated("This function is deprecated. \nFor further information please refer to the README")));
【讨论】:
以上是关于添加我自己的编译器警告的主要内容,如果未能解决你的问题,请参考以下文章