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

TUH*_*NDA -6 c c++ c-preprocessor

我在许多地方看到我们正在验证这样的陈述

 # if defined(DATA ) || defined(__hpux) || defined(__sun)
Run Code Online (Sandbox Code Playgroud)

我的疑问是:只有define喜欢#defined DATA和检查条件的含义是什么?

Ger*_*rdh 6

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

如果你这样检查

#if defined(A)
#endif
Run Code Online (Sandbox Code Playgroud)

然后,如果你用它定义它并不重要

#define A
Run Code Online (Sandbox Code Playgroud)

要么

#define A 1
Run Code Online (Sandbox Code Playgroud)

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

另一方面,如果你测试使用

#if A
#endif
Run Code Online (Sandbox Code Playgroud)

然后你将获得TRUEif A定义和非零,FALSE如果A没有定义你将得到.


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

如果您打算启用/禁用功能,并将宏定义为其中一个,0或者1您需要检查第二个变体:

#define A 0

#if A
  .. enabled
#else
  .. disabled  <<<< We go here if A is defined as 0
#endif
Run Code Online (Sandbox Code Playgroud)

如果您#ifdef在一个地方意外检查,您将得到意想不到的结果:

#define A 0

#ifdef A
  .. enabled  <<<< We go here if A is 0 (and for any other value of A)!!
#else
  .. disabled
#endif
Run Code Online (Sandbox Code Playgroud)

这可能会引起一些混乱.