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

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

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

75323 次浏览

任何地方:

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

参考资料: 诊断

如果您只是想报告一个错误:

#ifdef RELEASE
#error Release mode not allowed
#endif

将与大多数编译器一起工作。

您可以使用 error指令进行此操作。如果没有定义 DEBUG,下面的代码将在编译时抛出错误:

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

C 提供一个 #error语句,大多数编译器添加一个 #warning语句。

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

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

另外,还有一种生成警告的方法。 创建未引用的标签,如

HereIsMyWarning:

不要引用它。在编译过程中,你会得到一个类似

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

对于 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);

在代码: : 块中,如果不需要发布模式,可以删除发布模式。为此,单击“项目”菜单,选择“属性...”,然后在“构建目标”选项卡中,单击“发布”,然后单击“删除”按钮。删除发布模式只适用于当前项目,因此您仍然可以在其他项目中使用它。

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

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