推奨されます, 2019

エディターズチョイス

定義と宣言の違い

あなたがプログラミングに慣れていないなら、定義と宣言はとても混乱しやすい用語です。 2つの概念は、定義には変数へのメモリ割り当てが含まれるのに対し、宣言ではメモリが割り当てられないため、いくつかの点で異なります。 宣言は複数回行うことができます。逆に、実体はプログラム内で1回だけ定義できます。

ほとんどのシナリオでは、定義は自動的に宣言になります。 それでは詳細な比較表で定義と宣言の違いを理解しましょう。

比較表

比較基準定義宣言
基本変数、関数またはクラスに格納されている値を決定します。変数、関数、クラスなどの名前と型を指定します。
メモリ割り当て発生します起こらない。
繰り返し一度定義されているステートメントは、再度定義することはできません。再宣言は簡単に可能です。
範囲期間が決定されます可視性が指定されている

定義の定義

定義は、変数、関数、クラスなどの名前に関連するコードまたはデータを識別します。 宣言されたエンティティーに記憶域を割り当てるために、コンパイラーは定義を必ず必要とします。 変数が定義されるとき、それはその変数のための数バイトからなるメモリの量を保持します。 関数定義はその関数のコードを生成します。 定義はプログラム要素の一意の仕様であるため、プログラム要素はプログラム内で1回だけ定義できます。 宣言と定義の間の関係は、1対多になります。

状況によっては、プログラム要素を定義せずに宣言することができます。たとえば、関数が呼び出されなかったり、宣言されていてもそのアドレスが使用されたりしない場合などです。 もう1つの例は、クラス定義を宣言しなければならない間は使用しないというものです。

宣言の定義

宣言は、変数の名前、関数、名前空間、クラスなど、プログラムに名前を指定するために使用されます。宣言なしでプログラム内で名前を使用することはできません。 プログラム要素は、定義とは異なり、複数回宣言できます。 複数の宣言は、同じ形式を使用して異なる宣言が行われた場合にのみ達成できます。 宣言は、コンパイラの観点からプログラム要素を可視化する手段です。

宣言は定義の目的にかなうものであり、ある場合にのみ、以下に与えられる条件が暗示されない。

  • 静的データメンバがクラス宣言内で宣言されている場合、その場合、それは宣言ではありません。 クラスのすべてのオブジェクトに対して1つのコピーしか生成されず、静的データメンバーは提供されたクラス型のオブジェクトのコンポーネントになるためです。
  • 宣言がtypedefステートメントの場合
  • 変数が初期化指定子または関数本体なしで宣言されていますが、extern指定子が含まれています。 それは定義が他の機能のためであるかもしれないことを示して、外部リンケージという名前を提供します。
  • クラスTのような定義を含まないクラス名宣言。

通常、宣言はスコープ内で行われます 。 スコープは宣言された名前の可視性と定義されたオブジェクト期間を決定します。

定義と宣言の主な違い

  1. プログラム要素の定義によって、その要素に関連付けられている値が決まります。 一方、プログラム要素の宣言は、その名前と型をコンパイラに指定します。
  2. 宣言にはメモリ割り当ては含まれませんが、program要素の定義はある程度のメモリを予約します。
  3. プログラム要素は複数回宣言できます。 逆に、定義では、プログラム要素の名前を持つ一意の指定が組み込まれています。プログラム要素の名前は、コードまたはデータによって区別できます。
  4. 宣言の範囲は、変数、関数、オブジェクト、クラス、列挙などの可視性を表します。対照的に、定義では、範囲は期間に関係します。

定義例

  • 変数の定義と宣言
    int r = 10;
  • 機能定義
     int add(int x、int y){int a; a = x + y。 を返します。 } 

宣言の例

  • 変数宣言:
    extern int r;
  • 関数宣言:
    int add (int p1, int p2);

結論

宣言プロセスは、プログラム要素をコンパイラから見えるようにするために使用され、メモリを割り当てる必要はありません。 逆定義は、記憶域を予約する宣言です。つまり、コンパイラは宣言されたエンティティ用にメモリ領域を予約します。

Top