如何检查单行认为没有定义一个前处理器宏

How to check in a single line that none of the pre-processor macros are defined?

本文关键字:一个 前处理 处理器 定义 何检查 检查 单行认      更新时间:2023-10-16

如果定义了至少一个宏,则很容易检查一行:

#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加入一行?

模拟嵌套的#ifndef'S:

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

这检查没有定义。您说您要"至少一个未定义",但是您的示例涵盖了||s。

嵌套的 #ifndef可以在同一行上加入&&

#if !defined(A) && !defined(B) && !defined(C)
#endif

问题:如何检查一条没有定义宏的单行?

  • 检查是否定义了一个宏:#if defined A
  • 检查是否未定义一个宏:#if !defined A。"如果未定义"。
  • 检查是否未定义几个宏:#if !defined A && !defined B && !defined C
    "如果未定义A并且未定义B,则未定义C"

常识通常会使您在布尔代数方面很远。为了找出更复杂的情况的布尔方程,请定义真相表。示例:

0 = false(未定义)1 = true(定义)

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