添加我自己的编译器警告

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")));

【讨论】:

以上是关于添加我自己的编译器警告的主要内容,如果未能解决你的问题,请参考以下文章

如何在我自己的代码中使用 Visual C++ 在不运行静态代码分析的情况下导致 SAL 编译器警告

无法禁用特定编译器警告 (4100)

C 语言学习的第 04 课:编译器常见错误和警告

Kotlin 移除 编译器警告

Kotlin 移除 编译器警告

有没有办法抑制 Xcode 中的警告?