変数はさらに「ローカル」変数と「グローバル」変数に分類されます。 ここで、ローカル変数とグローバル変数の主な違いは、ローカル変数はファンクションブロック内で宣言され、グローバル変数はプログラム内の関数の外側で宣言されていることです。
比較チャートと共に、ローカル変数とグローバル変数の違いについてもう少し検討しましょう。
比較表:
比較基準 | ローカル変数 | グローバル変数 |
---|---|---|
宣言 | 変数は関数内で宣言されています。 | 変数は関数の外側で宣言されています。 |
範囲 | 関数の中で、その中で宣言されています。 | プログラムを通して。 |
アクセス | それらが宣言されている関数内で、ステートメントによってのみアクセスされます。 | プログラム全体の中の任意のステートメントによってアクセスされます。 |
生活 | ファンクションブロックに入ったときに作成され、終了時に破棄されます。 | プログラムが実行されている間ずっと存在し続けます。 |
ストレージ | 指定しない限り、ローカル変数はスタックに格納されます。 | コンパイラによって決められた固定位置に格納されます。 |
ローカル変数の定義
ローカル変数は常にファンクションブロック内で宣言されます。 Cでは、ローカル変数はコードブロックの先頭で宣言されます。 C ++では、使用前にコードブロック内の任意の場所で宣言できます。 ローカル変数は、ローカル変数が宣言されている関数内に書かれたステートメントによってのみアクセスできます。 それらは、同じプログラムの他のどの機能からもアクセスできないという意味で安全です。
ローカル変数は、関数のブロックが実行中になるまで存在し、それによって実行がブロックを終了した後に破壊されます。 ローカル変数は、宣言されているブロックを実行が終了するとすぐに内容が失われます。
その背後にある理由は、それらの特別な記憶域が指定されていない限り、ローカル変数はスタックに格納されているからです。 スタックは本質的に動的であり、メモリ位置の変更は、関数のブロックが存在するとすぐにローカル変数がそれらの値を保持しない理由につながります。
注意:
ただし、 'static'修飾子を使用して、ローカル変数の値を保持する方法があります。
グローバル変数の定義
グローバル変数は、プログラム内に存在するすべての関数の外側で宣言されています。 ローカル変数とは異なり、グローバル変数はプログラム内に存在する任意の関数からアクセスできます。 グローバル変数は、プログラム内に存在する関数によってその値が変更される可能性があるため、あまり信頼できません。
グローバル変数は、プログラム全体が完全に実行されるまで存在し続けます。 グローバル変数は、プログラムが実行されるまでその値を保持します。 その理由は、それらがコンパイラによって決定されたメモリの固定領域に格納されるからです。
グローバル変数は、複数の機能が同じデータにアクセスしている状況で役立ちます。 グローバル変数の値に不要な変更が加えられる可能性があるため、多数のグローバル変数を使用すると問題が生じる可能性があります。
ローカル変数とグローバル変数の主な違い
- ローカル変数は、宣言されている関数内で記述されたステートメントにしか認識されず、そのファンクションブロックの外側に存在する他の関数には認識されないため、「ローカル」と呼ばれます。 大域変数の場合、それらはプログラム内に存在するすべての機能に認識されます。 したがって、それらは「グローバル」と呼ばれます。
- グローバル変数は、コンパイラによって決定された固定位置に格納されるため、プログラムが実行フェーズになるまでその値を保持します。 ローカル変数はスタックに格納されます。 したがって、 'stack'は本質的に動的であるため、それらの値は保持されませんが、 'static'修飾子を使用することによって、コンパイラはそれらの値を保持するように指示できます。
- グローバル変数とローカル変数が同じ名前で宣言されている場合、ローカル変数が宣言されているコードブロックのすべてのステートメントはローカル変数のみを参照し、グローバル変数には影響しません。
- ローカル変数は、プログラムの制御がローカル変数が宣言されているブロックから出たときに破棄されます。 ただし、グローバル変数はプログラム全体が終了すると破壊されます。
結論:
プログラムの作成中は、ローカル変数とグローバル変数の両方が等しく必要です。 しかし、大規模なプログラムでは、大域変数に不要な変更を加える可能性があるため、多数の大域変数を宣言することは問題になる可能性があります。 そして、プログラムのどの部分がその変更を行ったのかを識別するのが難しくなります。 したがって、不必要なグローバル変数を宣言することは避けてください。