我在很多地方看到我们正在验证语句,例如
# if defined(DATA ) || defined(__hpux) || defined(__sun)
我的疑问是:只有像#defined DATA
这样的define
和检查条件有什么意义?
这些定义用于有条件地编译代码。
如果你这样检查
#if defined(A)
#endif
那么如果你用
#define A
或
#define A 1
在这两种情况下,宏都已定义,#ifdef A
或#if defined (A)
将导致TRUE
。
另一方面,如果您使用
#if A
#endif
然后,如果定义了A
并且不为零,您将获得TRUE
,如果未定义A
则将获得FALSE
。
这会导致潜在的陷阱。 您需要在整个代码中使用宏的方式保持一致!
如果您打算通过将宏定义为0
或1
来启用/禁用功能,则需要检查第二个变体:
#define A 0
#if A
.. enabled
#else
.. disabled <<<< We go here if A is defined as 0
#endif
如果您不小心在一个地方检查了#ifdef
,您将获得意想不到的结果:
#define A 0
#ifdef A
.. enabled <<<< We go here if A is 0 (and for any other value of A)!!
#else
.. disabled
#endif
这可能会导致一些混乱。
"#defined var"本身不会产生逻辑效果。它的行为类似于语句。 它相当于有一行"i == 1;",因为 i 是之前启动的。
请确保您的问题下次清晰明确。祝你好运