这些天我正在研究一些源代码。在某些代码中,我发现了这些。不知道这意味着什么。有什么想法吗?
#include "pth_p.h"
#if cpp
#ifndef PTH_DEBUG
#define pth_debug1(a1) /* NOP */
#define pth_debug2(a1, a2) /* NOP */
#define pth_debug3(a1, a2, a3) /* NOP */
#define pth_debug4(a1, a2, a3, a4) /* NOP */
#define pth_debug5(a1, a2, a3, a4, a5) /* NOP */
#define pth_debug6(a1, a2, a3, a4, a5, a6) /* NOP */
#else
#define pth_debug1(a1) pth_debug(__FILE__, __LINE__, 1, a1)
#define pth_debug2(a1, a2) pth_debug(__FILE__, __LINE__, 2, a1, a2)
#define pth_debug3(a1, a2, a3) pth_debug(__FILE__, __LINE__, 3, a1, a2, a3)
#define pth_debug4(a1, a2, a3, a4) pth_debug(__FILE__, __LINE__, 4, a1, a2, a3, a4)
#define pth_debug5(a1, a2, a3, a4, a5) pth_debug(__FILE__, __LINE__, 5, a1, a2, a3, a4, a5)
#define pth_debug6(a1, a2, a3, a4, a5, a6) pth_debug(__FILE__, __LINE__, 6, a1, a2, a3, a4, a5, a6)
#endif /* PTH_DEBUG */
#endif /* cpp */
答案 0 :(得分:10)
它正在测试预处理器可见的某个名为cpp的常量(很可能是一个宏)是非零的。
通常的惯例是,宏应该全部为大写,以便它们更明显,但它们不一定是(这里显然就是这种情况)。
我的猜测是它代表c ++,其中一个包含的头文件(也许是pth_p.h?)定义了它是否正在使用c ++编译器。如果是这种情况,可以使用更多标准的东西,例如:
#ifdef __cplusplus
答案 1 :(得分:4)
这是一个预处理程序指令的示例,它允许您在编译时测试表达式。 Here is a good explanation.
答案 2 :(得分:2)
我怀疑这是检查代码是由c ++编译器还是c编译器编译的。如果是C ++,如果还设置了PTH_DEBUG标志,则定义宏。我怀疑这个标志会在调用编译器时设置。如果是C,则不定义宏。为什么会出现这种情况取决于pth_debug宏的用途。