2011-01-03 52 views

答えて

3

シンボルは、コンパイラのお得な情報を持つものです。コンパイラはconstを、変数を扱う方法とほとんど同じように扱います。一方、#defineは、コンパイラが認識していないものです。プリコンパイラがその値に変換するためです。検索と置換のようなものです。あなたは

#define A 5 

、その後

b += A; 

を行う場合、プリコンパイラは

b += 5; 

に変換し、すべてのコンパイラが見ている番号5.

0

リテラル定数は、 "string"や2またはfalseのようなプリミティブな表現であり、シンボリックな表現はconst int MagicNumber = 42のような名前を付けるときです。どちらも使用できます式として使用できますが、後者を名前で参照できます。多くの場所から同じ定数を使用する場合に便利です。

+1

C言語で(そして質問にはタグが付いています)、 'const int'オブジェクトは定数ではありません。 Cで名前付き定数(記号定数)を生成するには、 '#define'またはenumを使用する必要があります。 – AnT

+0

ハハ、申し訳ありませんが、私はC#の質問をブラウズしていると思いました:) – fejesjoco

3

はリテラル定数がされています必要な場合はいつでもプログラムに直接入力することができます。例えば

int型tempInt = 10。

tempIntはint型の変数です。 10はリテラル定数です。 10に値を代入することはできず、その値を変更することはできません。記号定数は変数と同じように名前で表される定数です。ただし、変数とは異なり、定数が初期化された後は、その値を変更することはできません。

あなたのプログラムは、学生と別の名前のクラスという名前の1つの整数の変数を持っている場合は、クラスあたり15人が知っていたならば、あなたは、クラスの既知の数を考えると、あなたが持っているどのように多くの学生を計算できます。

学生は=クラス* 15; (以前の記事からの借入)

0

リテラル定数は、それが必要とされているところはどこでもあなたのプログラムに直接入力した値です。たとえば、

int breakpoint = 10; 

可変ブレークポイントは整数(int)です。 10はリテラル定数です。 10に値を代入することはできず、その値を変更することはできません。変数とは異なり、定数は値が代入された後では変更できません(初期化)。

シンボルは、コンパイラのお得な情報を持つものです。この例では、TENは#define関数を使用して作成された記号定数です。 #defineは、プリコンパイラがそれを割り当てられた(定義された)値に変換するため、コンパイラが認識していないものです。プリコンパイラは、プログラム内のすべてのシンボル定数を検索し、値で置き換えます。

#define TEN 10  /* These two lines of code become one... */ 
breakpoint += TEN; /* after running through the precompiler */ 

プリコンパイラは、コンパイラがTENを見たことがないだけで、それに割り当てられた値が、10なぜこの便利なのです

Breakpoint += 10; 

に変換しますか?ブレークポイントが11に変更されたらどうなるでしょうか?プログラム全体を見て、すべての変数定義をリテラル定数10を使って設定した新しい値に変更するのではなく、1つのシンボル定数... TENを11に変更します。プリコンパイラで変更を行います。

関連する問題