7

重複の可能性:
C の「static const」と「#define」

Objective-C では、次の 2 行の違いは何ですか:

#define myInteger 5

static const NSInteger myInteger = 5;

実装ディレクティブの上の MyClass.m にあると仮定します。

4

4 に答える 4

16
#define myInteger 5

プリプロセッサ マクロです。プリプロセッサは、コンパイラが開始される前に、出現するすべてのmyIntegerwithを置き換えます。5これは変数ではなく、一種の自動検索および置換メカニズムです。

static const NSInteger myInteger = 5;

これは、定数である「実際の」変数です (宣言後に変更することはできません)。静的とは、そのブロックへの複数の呼び出しにわたって共有変数になることを意味します。

于 2012-10-20T17:15:37.903 に答える
2

違いがあります:

  1. 定義はテキスト置換です:

    • 定義は、コンパイル前に行われるプリプロセッサのテキスト置換です。define が出現するたびに 5 をテキストで置き換えると、同じ効果が得られます。
  2. static const はメモリ内の変数です

    • ただし、静的 const は、プログラム メモリに常駐する NSInteger 型のインスタンスです。実行時に変更することはできませんが、メモリに存在する値であり、変数としての独自のアドレスです。
于 2012-10-20T17:18:57.727 に答える
2

#define を使用すると、コードがバイナリに変換される前に、コンパイラによって識別子が指定された値に置き換えられます。これは、アプリケーションをコンパイルするときに、コンパイラが置換を行うことを意味します。

const を使用してアプリケーションを実行すると、メモリが定数に割り当てられ、アプリケーションの実行時に値が置き換えられます。

このリンクを参照してください:- static const と #define の違い

于 2012-10-20T17:15:42.977 に答える
1

#define myInteger 5定数を宣言するマクロです。

したがって、マクロを使用する場所はどこでもmyInteger、プリプロセッサ エンジンによって 5 に置き換えられます。

const NSInteger myInteger = 5;値 5 を保持する変数 myInteger を宣言します。

ただし、使用法は同じです。つまり、ハードコーディングを防ぐために使用できる定数です。

于 2012-10-20T17:14:24.803 に答える