如何在一行中检查没有定义任何预处理器宏?

时间:2017-09-26 12:15:07

标签: c++ c c-preprocessor

如果定义了至少一个宏,则可以轻松检查一行:

#if defined(A) || defined(B) || defined(C)
    // do something
#endif

如果未定义至少一个宏,则还要检查一行:

#if !defined(A) || !defined(B) || !defined(C)
    // do something
#endif

问题: 如何检查单行中没有定义任何宏?

我可以用三行中的ifndef来完成,如下所示:

#ifndef A
#ifndef B
#ifndef C
    // do something
#endif
#endif
#endif

但是如何将三个ifndef加入一行?

3 个答案:

答案 0 :(得分:4)

模拟嵌套的#ifndef':

#if !defined(A) && !defined(B) && !defined(C)
  // do something
#endif

检查没有定义。你说你想要"至少有一个没有定义",但你的例子涵盖|| s。

答案 1 :(得分:3)

嵌套#ifndef只能与&&

在同一行上加入
#if !defined(A) && !defined(B) && !defined(C)

#endif

答案 2 :(得分:2)

  

问题:如何在一行中检查没有定义任何宏?

  • 检查是否定义了一个宏:#if defined A
  • 检查是否未定义一个宏:#if !defined A。 "如果没有定义A"。
  • 检查是否未定义多个宏:#if !defined A && !defined B && !defined C "如果未定义A且未定义B且未定义C"

常识通常会让你在布尔代数中走得很远。要找出更复杂情况的布尔方程,请定义真值表。例如:

0 =假(未定义) 1 =真(定义)

A B C Output
0 0 0 1
0 0 1 0
0 1 0 0
0 1 1 0
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 0
相关问题