2010-12-07 8 views
1

私は.NETの開発者で、iPhoneに近づいています。iPhoneと.NETではconstキーワードがどのように異なるのですか?

私は.NETで通常は読みやすいように名前付き定数を使用していました。 iPhoneのdevにはconstキーワードがありますが、この例では#defineを使用した例がほとんどです。

2つの実装の実際の違いは何ですか? ボーナスに関する質問:いつ、どのように使用すべきですか、使用すべきではありませんか?

+0

可能な限りconstを使用する必要がある場合にのみ#を定義します。 –

答えて

2

定数はObjective-Cで宣言して振る舞う方法を議論するように、他の質問の数がありますが、あなたは以下をご覧ください:

Constants in Objective-C

Objective-C “const” question

Significance of const keyword positioning in variable declarations

C#と比較するには、Obj-Cのconstは基本的にC言語のものと同じです(Obj-Cはsupeです実際にはCのrset)。 Obj-Cでは、定数はグローバルスコープで宣言されており、コンパイル時に既知の値に初期化する必要があります。 Objective-Cは定数をクラスメンバとしてサポートしていません。 C#では、定数は常にクラス(または構造体)のメンバーであり、コンパイル時に既知の値を使用して初期化する必要があります。 C##defineでは、定義されたシンボルに値を関連付けることはできず、条件付きコンパイルパス(#if#elseを使用)を選択することができます。これは全く異なります。

#defineを使用して定数を宣言することについては、可能な限り個人的にこれを避けるようにしています。 #definedの値は、コンパイル時にコードに代入されるだけで、異なるコンテキストでは異なる解釈が可能です。名前の衝突を導入することも可能で、予期せず値の再定義が行われる可能性があります。可能であればconstを使用し、必要なときには#defineを使用することをお勧めします。

1

#definesは、最終コードで置き換えられるプリプロセッサマクロです。このように、それらは一度定義された価値を持ち、無料でアクセスできます。一方、constは、コンパイラが処理する変数を静的に割り当てるだけです。そのため、ほとんどの作業ではconstではなく#defineを使用します(むしろ)。
switch文には、#defined'dの定数だけを使用できます。

+0

便利な情報、ありがとう:) –

関連する問題