C++宏解释

C++宏解释,c++,macros,c-preprocessor,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

有人能解释一下下面的代码吗

#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
我可以理解函数在做什么,但例如 如果我们稍后调用,预处理器如何选择执行哪个ZXP? 1和0代表什么?

如果1触发第一组定义,那么将PREINCREMENT设置为1会更快。因此,如果PREINCREMENT\u更快,则触发第一个define ZXP

在这种情况下,1和0没有什么例外。如果if预处理器指令的参数非零,则该指令将成功


通过使用if 0更改文件顶部的if 1,可以切换到备用表单。谢谢@rabidmachine给我的提示。

我可能倾向于同意叔叔们的意见,并建议这样做是为了让你不理解它,因为所有这些都是毫无用处的。

谢谢!那么,如果我们总是知道我们将执行第一个ZXP,那么有什么必要同时使用它们呢?@rabidmachine:您可以通过将第一行更改为0来切换到使用另一个集合,如果所有操作都可能用于代码混淆。你不应该理解其中任何一点: