在头文件中只定义一行

时间:2014-05-05 08:45:12

标签: c c-preprocessor conditional-compilation

假设头文件中有三行,例如:

#define line1
#define line2
#define line3

我想确保在评论所有行时应该定义line1。我也想知道任何两行或三行不应同时处于活动状态(未注释)。例如,如果line2和line3同时处于活动状态,则编译器应生成错误。

我该怎么做?

3 个答案:

答案 0 :(得分:4)

确保在没有其他内容时定义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

答案 1 :(得分:1)

也许这就是你想要的:

#if defined(line2) && defined(line3)
    //generate error
#endif

答案 2 :(得分:1)

line1line2line3的(可能评论的)定义下方添加此内容:

#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

这应确保三个中的一个定义处于活动状态。