2011-03-05 23 views
5

これを行うという違いは何でしょうか?私は他の上のいずれかを使用する必要があり、どのような状況で#DefineとFloatの違いは?

#define NUMBER 10 

float number = 10; 

答えて

13
#define NUMBER 10 

プリプロセッサによって実行される(コンパイル時に)文字列置換を作成します。

float number = 10; 

バイナリのデータセグメントに浮動小数点を作成し、それを10に初期化します。それはアドレスを持ち、変更可能です。

float a = number; 

を書くことは、メモリ・アクセスを作成するのに対し、そう

float a = NUMBER; 

を書くこと

float a = 10; 

を書くことと同じになります。

+0

また注目すべきは、パッティング '浮く= 10;'(または何でも)ヘッダファイルの中にありそうなリンクする際、シンボルエラーを複製するつながる:

もこの質問と受け入れ答えを参照してください。しかし、 '#define'を使うことはできません。 – trojanfoe

0

「の#define」は、実際のプログラムの開始前に実行されるプリプロセッサマクロであり、プログラム全体の有効

フロート/プログラム/ブロック内定義のデータ型であり、唯一のプログラム内で有効ですブロック。

+1

"プログラムが開始する前に"とは、コンパイルする前を意味します。 –

4

フィリップ氏の言うとおり、#defineフォームは、コンパイル前の前処理段階でコードに置き換えを作成します。 #definenumberのような変数ではないため、コンパイル時に実行可能ファイルにハードベイクされます。これは、repesentingしているものが、実行時にどこかから計算や読み込みを行う必要がなく、実行時に変更されない真の定数である場合に望ましいものです。

#definesは、コードを読みやすくするために非常に便利です。

#define GRAV_CONSTANT 0.98f 

... 

float finalVelocity = beginVelocity + GRAV_CONSTANT * time; 

:だけではなく、あなたは重力加速度定数を使用する必要がどこでも、あなたのコードに0.98fをplonking、あなただけの一箇所でそれを定義することができますし、それはあなたのコードの可読性を向上させる - あなたは物理計算をしていたと仮定編集 戻って私の答えを見つけて、なぜあなたが#defineを使用すべきではないか言及していないのを見て驚いた。

通常、#defineを避け、実際の型である定数を使用します。#defineにはスコープがなく、型はIDEとコンパイラの両方にとって有益です。 What is the best way to create constants in Objective-C

関連する問題