TUH*_*NDA -6 c c++ c-preprocessor
我在许多地方看到我们正在验证这样的陈述
# if defined(DATA ) || defined(__hpux) || defined(__sun)
Run Code Online (Sandbox Code Playgroud)
我的疑问是:只有define喜欢#defined DATA和检查条件的含义是什么?
这些定义用于有条件地编译代码.
如果你这样检查
#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)
这可能会引起一些混乱.