2010-05-02 49 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,並建議它這樣做,所以你不明白它,因爲整件事完全沒用。