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です。100にPTM_RATIOを掛けると3200.000000になるのに、PTM_RATIO_2を掛けると32.000000になるのはなぜですか。

4

2 に答える 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
于 2013-03-25T19:58:00.913 に答える
1

PTM_RATIO_2は、実際のコードで次のように評価されます

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

あなたは、MACROがライブコード計算の前に評価することを想定しています。

于 2013-03-25T19:59:28.127 に答える