我有一个必须仅在DEBUG模式下编译的程序。 (测试目的)
如何让预处理器阻止在RELEASE模式下编译?
答案 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