假设头文件中有三行:
#define line1
#define line2
#define line3
我想确定当所有行都被注释时应该定义line1。我还想知道任何两到三条线不应该同时活跃(不评论)。例如,如果line2和line3同时处于活动状态,编译器会生成一个错误。
我该怎么做呢?
确保在没有其他内容时定义了line1
:
#if !defined(line1) && !defined(line2) && !defined(line3)
#define line1
#endif
如果定义了多行,生成错误:
#if (defined(line1) && defined(line2)) || (defined(line1) && defined(line3)) || (defined(line2) && defined(line3))
#error "Your message here"
#endif
也许这就是你想要的:
#if defined(line2) && defined(line3)
//generate error
#endif
将此添加到(可能已注释的)line1
, line2
和line3
的定义下面:
#define CHK(a,b,c) (defined(a) && !defined(b) && !defined(c))
#if !(CHK(line1,line2,line3) || CHK(line2,line3,line1) || CHK(line3,line1,line2))
#error "Improper combination line1/line2/line3"
#endif
这将确保三个定义中只有一个是活动的。