【问题标题】:Add my own compiler warning添加我自己的编译器警告
【发布时间】:2010-01-26 22:59:22
【问题描述】:

使用 sprintf 时,编译器会警告我该函数已弃用。

如何显示我自己的编译器警告?

【问题讨论】:

  • sprintf 被弃用与这个问题有什么关系?
  • 只是一个编译器警告的例子,它是由“用户”输入的,而不是纯粹由编译器生成的。

标签: c++ windows visual-c++


【解决方案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")));

【讨论】:

    猜你喜欢
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多