2010-05-02 48 views
0

有人可以解释下面的代码吗?C++宏说明

#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代表什么?

+0

这完全可能是代码混淆。你不应该了解它:) – UncleBens 2010-05-02 10:06:28

回答

6

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

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

您可以通过#if 0更改文件顶部的#if 1来切换到替代形式。 (谢谢@rabidmachine的提示。)

+0

谢谢! 因此,如果我们总是知道我们将执行第一个ZXP,那么他们两个都需要什么? – rabidmachine9 2010-05-02 09:46:35

+1

@rabidmachine:您可以通过将第一行更改为'#if 0'来切换到使用其他设置 – UncleBens 2010-05-02 10:07:44

1

我可能倾向于同意UncleBens,并建议它这样做,所以你不明白它,因为整件事完全没用。