C++宏解释

rab*_*ne9 0 c++ macros c-preprocessor

有人可以解释下面的代码吗?

#if 1

// loop type
#define FOR_IS_FASTER 1
#define WHILE_IS_FASTER 0
// indexing type
#define PREINCREMENT_IS_FASTER 1
#define POSTINCREMENT_IS_FASTER 0

#else

// loop type
#define FOR_IS_FASTER 1
#define WHILE_IS_FASTER 0
// indexing type
#define PREINCREMENT_IS_FASTER 0
#define POSTINCREMENT_IS_FASTER 1

#endif


#if PREINCREMENT_IS_FASTER
#define ZXP(z) (*++(z))
#define ZX(z) (*(z))
#define PZ(z) (++(z))
#define ZP(z) (z)
#define ZOFF (1)
#elif POSTINCREMENT_IS_FASTER
#define ZXP(z) (*(z)++)
#define ZX(z) (*(z))
#define PZ(z) (z)
#define ZP(z) ((z)++)
#define ZOFF (0)
#endif
Run Code Online (Sandbox Code Playgroud)

我可以理解这些功能在做什么,但是例如,如果我们稍后再调用它,预处理器如何选择执行哪个ZXP?1和0代表什么?

Mar*_*tos 6

所述#if 1触发器第一组的#defines,它设置PREINCREMENT_IS_FASTER为1.由于这个原因,#if PREINCREMENT_IS_FASTER触发第一#define ZXP....

在这种情况下,1和0没有什么特别之处.如果#if预处理器参数的参数非零,则预处理器指令会成功.

您可以通过更改#if 1文件顶部的切换到备用表单#if 0.(谢谢@rabidmachine的提示.)