如何在C预处理器中生成错误或警告?

时间:2010-02-08 12:29:55

标签: c-preprocessor

我有一个必须仅在DEBUG模式下编译的程序。 (测试目的)

如何让预处理器阻止在RELEASE模式下编译?

7 个答案:

答案 0 :(得分:71)

放在任何地方:

#ifndef DEBUG
#error Only Debug builds are supported
#endif

答案 1 :(得分:17)

C提供#error语句,大多数编译器都添加#warning语句。 The gcc documentation recommends引用该消息。

答案 2 :(得分:9)

也许更柔和的东西,但它只是先前解决方案的复制和粘贴。 : - )

#ifdef DEBUG        
    #pragma message ( "Debug configuration - OK" )
#elif RELEASE   
    #error "Release configuration - WRONG"
#else
    #error "Unknown configuration - DEFINITELY WRONG"
#endif

P.S。还有另一种方法来生成警告。 创建一个未引用的标签,如

HereIsMyWarning:

并且不参考它。在编译期间,您将收到类似

的警告
 1>..\Example.c(71) : warning C4102: 'HereIsMyWarning' : unreferenced label

答案 3 :(得分:4)

您可以使用error指令。如果未定义DEBUG,则以下代码将在编译时抛出错误:

#ifndef DEBUG
#error This is an error message
#endif

答案 4 :(得分:3)

如果您只是想报告错误:

#ifdef RELEASE
  #error Release mode not allowed
#endif

适用于大多数编译器。

答案 5 :(得分:1)

对于GCC和Clang(可能是任何支持_Pragma功能的编译器),您可以定义一个宏:

#if ! DEBUG
#define FIX_FOR_RELEASE(statement) _Pragma ("GCC error \"Must be fixed for release version\"")
#else
#define FIX_FOR_RELEASE(statement) statement
#endif

您可以将此宏用于临时黑客攻击,例如绕过同事尚未编写的代码,以确保在您想要向公众发布构建版本时不要忘记修复它。任

FIX_FOR_RELEASE()
// Code that must be removed or fixed before you can release

FIX_FOR_RELEASE(statement that must be removed or fixed before you can release);

答案 6 :(得分:1)

在Code :: Blocks中,如果您不想要发布模式,则可以删除发布模式。要执行此操作,请单击“项目”菜单,选择“属性...”,然后在“构建目标”选项卡中,单击“发布”,然后单击“删除”按钮。删除发布模式仅对当前项目执行,因此您仍可以在其他项目中使用它。

否则,如果您真的想使用预处理器,可以这样做:

#ifdef RELEASE
#error "You have to use the Debug mode"
#endif