2016-05-27 4 views
0

ViewControllerの上部には、私は私は2つの方法によりMESSAGE_SIZEにアクセスしようと、メソッド内でこのは直接

#define IPHONE [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone 
#define MESSAGE_SIZE IPHONE ? 12 : 13 

ようMESSAGE_SIZEを定義していないプラスの#define変数にできます。それは同じようだが、異なる結果を生成

float size = MESSAGE_SIZE + 2; 
NSLog(@"size = %f",size); 

float size2 = MESSAGE_SIZE; 
float size3 = size2 + 2; 
NSLog(@"size3 = %f",size3); 

私はIPHONE上でテストし、ここでのログイン

ある
2016-05-27 14:59:02.992 EarCrush[8278:135453] size = 12.000000 
2016-05-27 14:59:02.992 EarCrush[8278:135453] size3 = 14.000000 

ホープ誰かがこれが起こった理由を説明します。どんな助けや提案も大歓迎です。

答えて

2

プリプロセッサマクロは、ファンシーテキスト置換コマンドです。何コンパイル時に起こること

float size = MESSAGE_SIZE + 2; 
NSLog(@"size = %f",size); 

私はIPHONEがtrueと評価するので、あなたが12を得ることを前提としてい

float size = IPHONE ? 12 : 13 + 2; 
NSLog(@"size = %f",size); 

なることです。

第2のケースで

float size2 = MESSAGE_SIZE; 
float size3 = size2 + 2; 
NSLog(@"size3 = %f",size3); 

あなたは括弧を使用してマクロを向上させることができます

float size2 = IPHONE ? 12 : 13; // 12 
float size3 = size2 + 2;   // 14 
NSLog(@"size3 = %f",size3); 

になります。

#define MESSAGE_SIZE (IPHONE ? 12 : 13) 

今、最初の例では、14の期待答えを与える

float size = (IPHONE ? 12 : 13) + 2; 
NSLog(@"size = %f",size); 

になります。

+0

「IPHONE」も展開されます。 –

+0

真ですが、答えには関係ありません。 – Avi

+0

ありがとうございます。今私はなぜこれが起こるか理解する –