我想知道如果多个enum
的值是坏的,我是否可以触发#error
。
enum config_choice {
YES,
NO
};
enum config_choice PARAM_1 = YES;
enum config_choice PARAM_2 = NO;
enum config_choice PARAM_3 = YES;
....
字符串
例如我想要像这样的东西
if(PARAM_1 == YES && (PARAM_2 == YES || PARAM_3 == YES) ){
#error "Bad configuration!!!"
}
型
枚举值在运行时永远不会更改。
1条答案
按热度按时间qnakjoqk1#
从C11开始,
static_assert
支持此功能-在即将到来的C23之前,您需要#include <assert.h>
for,因为它只是一个将其Map到_Static_assert
的宏(您也可以应用它,但C23会弃用前者,这使得前者也成为关键字)。但是,你需要 * 编译时间常量 *(和下面的老式变体一样),所以你需要:
字符串
(谢谢@StoryTeller的提示。
这类事情本身是不被支持的--但是你仍然可以通过使用一个小技巧来实现编译中断:创建或定义一个负大小的数组!
这可以看起来如下(一般情况):
型
举个具体的例子:
型
这会导致编译失败(您的目标),当然,产生的错误消息是非常不幸的。
如果你需要很多这样的检查,你可以创建一个宏,例如。
型
当然,您不能在同一行中定义多个测试,但无论如何都不推荐这样做(甚至更难阅读的错误消息)。
针对您的具体情况:
型
godbolt上的演示(使用宏)。