#define DATA 10和#如果定义了DATA之间的区别

时间:2017-08-08 13:06:25

标签: c++ c c-preprocessor

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

 # if defined(DATA ) || defined(__hpux) || defined(__sun)

我的疑问是:define只有#defined DATA的含义是什么意思并检查条件?

2 个答案:

答案 0 :(得分:6)

这些定义用于有条件地编译代码。

如果你这样检查

#if defined(A)
#endif

然后用

定义它并不重要
#define A

#define A 1

在这两种情况下都定义了宏,#ifdef A#if defined (A)将导致TRUE

另一方面,如果您使用

进行测试
#if A
#endif

如果TRUE已定义且非零,您将获得A,如果未定义FALSE,您将获得A

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

如果您打算启用/禁用定义宏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

这可能会造成一些混乱。

答案 1 :(得分:0)

单独“#defined var”没有逻辑效果。它表现得像一个声明。 它相当于有一行“i == 1;”,给定i先前已启动。

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