#define DATA 10 和 # (如果定义了 DATA)之间的差异



我在很多地方看到我们正在验证语句,例如

# 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


这会导致潜在的陷阱。 您需要在整个代码中使用宏的方式保持一致!

如果您打算通过将宏定义为01来启用/禁用功能,则需要检查第二个变体:

#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 是之前启动的。

请确保您的问题下次清晰明确。祝你好运

最新更新