constの静的にexternを定義します

CONST

  1. 彼は、変数を阻止したかったので、constの手段が変更され、あなたはconstキーワードを使用することができ、「読み取り専用しました」

  2. CONST変数は、右(基本的なデータ変数p、ポインタ変数* p)を変更するために使用しました

定義

#defineディレクティブは3つの用途があります:

  1. 最初の識別子はXXXの#defineのような形プログラム全体識別子の有効範囲は、しばしばの#ifと組み合わせて使用​​、定義されています

  2. 前者はコンパイラであってもよいことなくCONST定数データタイプ、およびデータは、マクロ定数を入力します。第2の定数はのでmaxが、この場合には(定数を定義CONST 100のより代表的であり、100の#define maxと定義されます。後者のみ文字の置換、セキュリティチェックの無いタイプ、および文字置換で予期しないエラーが発生することがあります)一方で、セキュリティチェックを入力

  3. 第三は、の#define get_max(B)としての "機能" の定義は、(()>(B)?(A):( B)後get_max使用されている)(x、y)はxとは、Yは、得ることができますこのようget_max(++、b)は、++の大きさaとbの実行に依存します!このメソッドの代わりに速度や使用インライン関数を高めるために提案された回数になりますときのような大きな数(このアプローチのいくつかの欠点があり、そこにこのような欠点であるが、aとbは、様々なデータ・タイプのものであってもよいため、この方法は確かに非常に柔軟であるが。)。

CONST定数は、マクロ定義の間の差を定義します

1.異なるコンパイラ治療

  • マクロは前処理段階で展開されている定義
  • constの定数は、動作フェーズを使用してコンパイルされています

2.異なるセキュリティチェック

  • マクロの種類がない定義し、任意の型チェックをしない、ちょうど立ち上げ
  • constの定数は、特定のタイプを持ってコンパイル時に型チェックを行います

さまざまな方法3.ストレージ

  • メモリを割り当てていない、ただ、どのように多くの時間が始まっていたどのように多くの場所で、打ち上げマクロを定義
  • メモリに割り当てられたCONST定数(ヒープは、スタックであってもよいです)

4.メモリ空間の割り当て

  • constがスペースを節約し、不要なメモリ割り当てを避けることができます

    //定数マクロの#define PI 3.14159
    constのdoulbe = 3.14159パイ; //ない場合PiをROMに......
    ダブルパイ= I;パイ//この場合はメモリを割り当てるはもはや割り当てられます!
    私はPIを=倍増; //コンパイルマクロ置換、メモリ割り当て
    ダブルJ =パイ; //なしメモリ割り当て
    ダブルJ = PI;そして//マクロ置換、再びメモリを割り当てます!
    ビューの組立点から定義CONST定数は、であるように(一定のCONSTを実行しているプログラムのコピーを1つだけ定義し、従って、所与の#defineとして即値としてではなく、唯一の対応するメモリアドレスを与えます読み取り専用グローバル変数、静的領域)が存在し、定数の数は、メモリ内の#defineコピーを定義しました。

の効率を向上させる5.

  • CONST一般的な分布定数のコンパイラは通常存在しない大きな列が  静的にextern定義constのようそれこと、コンパイル、ストレージなしメモリ読み出し動作中にそれ定数なりれ、収納スペースを、彼らは、シンボルテーブルに格納されています効率が非常に高いです

6.マクロ置換のみの交換ではなく、計算のために、式を解くことではありません

  • Acerは、プリコンパイル時に置き換え、ランタイム、メモリを割り当てません。

7.まとめ

  1. マクロ:テキストのみはまた、いかなる種類は、任意の型チェックせずに、コンパイラは、プリプロセッサで同じ文字列で最適化することはできません。.rodataのセグメントを維持するだけ。同じサフィックス文字列も最適化することができたとしてもで、あなたはGCCコンパイラのテスト、「こんにちは」と「世界」2つの文字列のみを格納する1つのフロントを使用することができます。ただ、フロントとアドレスの中間体を与えるために取られたとき、それはプラスチックである場合、そこにフロートの複数のコピーであってもよいが、これらの数字は、命令で書かれます。それだけスニペットを占め、マクロでバイナリファイルの数が多い大規模につながります

  2. 変数:共有メモリ空間は、プロジェクトがNで用いても、Nは、コンパイル時に型チェックを行うように変更することができるメモリ空間のブロックを割り当てられません

  3. 定数:N、Nブロックがメモリ空間を割り当てられていないプロジェクトで使用しても共有メモリ空間は、コンパイル時に型チェックを実行し、位置設定CONST修飾に応じて変更することができます

  4. 定数として宣言する必要がありstatic、定数ではなく#define、明示的にマクロとして使用されていない限りね。

静的

  1. ローカル変数の変更:プログラムが破壊を終了し、ローカル変数のライフサイクルを延長するために、ローカル変数は一度だけメモリの初期化が生成されます。

  2. グローバル変数のスコープを変更し、このファイルにアクセスすることができ、それがライフサイクルを変更しないだろう、グローバル変数の定義の重複を避けるために:グローバル変数を変更します。

  3. モジュール内の静的グローバル変数は、関数、モジュール内でアクセスすることができるが、他の機能がモジュールの外部アクセスできません

  4. モジュール内の静的関数のみモジュール内の他の関数によって呼び出されてもよく、この機能の使用は、それが宣言されたモジュール内に制限されています

  5. クラスの静的メンバ変数の所有クラスに属し、一つのコピーのみのクラスのすべてのオブジェクト

  6. クラスの静的メンバ関数を所有しているクラスに属し、この関数は、クラスにアクセスすることができるだけで静的メンバ変数をこのポインタを受信しません

外部の

  1. 効果:のみ(グローバル静的変数を含む)は、グローバル変数の値を取得するために使用される変数を定義するために使用することができません

  2. 仕組み:現在のファイルを初めて目にはグローバル変数を持っていない、我々は唯一の他のファイルを検索し、見つけることができませんでした。

共同利用

  1. 静的とconstの機能:読み取り専用の静的変数を宣言し、
    使用シナリオの開発:文字列定数は、多くの場合、文書で使用されている、あなたは、静的とconstの組み合わせを使用することができます

  2. 開発の使用シナリオ:頻繁にextern constのおよびそれらの組み合わせを使用して、複数のファイルで使用したのと同じ文字列定数。
    そして、静的定数の組み合わせ:各ファイルには、静的なグローバル変数を定義する必要があります。
    externとconstの組み合わせ:唯一のグローバル変数は、複数のファイル共有を定義する必要があります。

おすすめ

転載: www.cnblogs.com/lijianming180/p/12326841.html