2013-03-25 3 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 0, когда 100 умножается на PTM_RATIO, но 32.000000, когда умножается на PTM_RATIO_2?

ответ

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

+0

Хммм. Это очень хорошая помощь. Спасибо. –

1

PTM_RATIO_2 вычисляется следующим образом в реальном коде

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

Вы полагаете, что MACRO будет оценивать до жить вычисление кода.

Смежные вопросы