2013-03-25 103 views
1

我已經定義到預處理指令相同數目:在一個方法中獲得不同的結果與

#define PTM_RATIO 32 
#define PTM_RATIO_2 isIPad?64:32 

然後,我使用上述指令是這樣的:

NSLog(@"PTM_RATIO %d",PTM_RATIO); 
NSLog(@"PTM_RATIO_2 %d",PTM_RATIO_2); 

float32 test=100*PTM_RATIO; 
float32 test2=100*PTM_RATIO_2; 

NSLog(@"Test %f",test); 
NSLog(@"Test2 %f",test2); 

這裏是上面的代碼的輸出:

2013-03-25 23:43:57.011 Box2d[3625:15203] PTM_RATIO 32 
2013-03-25 23:43:57.019 Box2d[3625:15203] PTM_RATIO_2 32 
2013-03-25 23:43:57.020 Box2d[3625:15203] Test 3200.000000 
2013-03-25 23:43:57.021 Box2d[3625:15203] Test2 32.000000 

正如你所看到的,PTM_RATIO和PTM_RATIO_2是32.那麼,爲什麼我得到3200.00000當100乘以PTM_RATIO時爲0,但乘以PTM_RATIO_2時爲32.000000?

回答

3

預處理器宏主要是文本替換。變化:

#define PTM_RATIO_2 isIPad?64:32 

到:

#define PTM_RATIO_2 (isIPad?64:32) 

不這樣做,你的源代碼:

100*PTM_RATIO_2 

擴展爲:

100*isIPad?64:32 

,然後將其解析爲:

(100*isIPAD) ? 64 : 32 
+0

好的答案,我只是寫了類似的東西:-) – trumpetlicks 2013-03-25 20:00:37

+0

嗯。這是一個非常好的幫助。謝謝。 – 2013-03-25 20:05:42

1

的PTM_RATIO_2作爲

float32 test2 = (100*isIPad)?64:32; 

你假設宏將住碼計算之前評估實際的代碼如下評價。

相關問題