静的ローカル変数が「静的」と呼ばれる理由がわかります。静的メモリに割り当てたいのです。しかし、現在のファイル「静的」に制限したい関数と変数を呼び出す理由は何ですか?接続がわかりません。いずれにせよ、それらは静的メモリに割り当てられますよね?
static
キーワードは複数の意味でオーバーロードされており、どの意味が適用されるかは、それが表示される場所によって異なります。これは、オブジェクトのストレージ期間(ライフタイム)とリンケージの両方に影響します。 )ファイルスコープで宣言された関数のオブジェクトに関連付けられた識別子。
詳細については、 C11標準 のオンラインドラフトの「6.2.2識別子のリンク」および「6.2.4オブジェクトの保存期間」を参照してください。
static
キーワードは、ファイルスコープ(関数の本体の外部)で宣言された関数およびオブジェクト識別子のリンケージにのみ影響することに注意してください-関数またはブロック内で宣言された識別子(およびextern
キーワードなし)リンケージはありません。
静的ローカル変数が「静的」と呼ばれる理由がわかります-静的メモリに割り当ててほしい
いいえ。 static
キーワードは、Cプログラミング言語の初期の頃にさかのぼります アイテムのスコープと有効期間の両方を指定できます 。
Cによって「触発された」言語は、static
キーワードをコピーし、その「存続期間」の意味で使用しました。静的メンバーは通常、アプリケーションの実行全体の存続期間があります。
Cでは、用途に応じて、static
およびextern
キーワードは変数のスコープまたは存続期間を示します。
私見、これは間違いでした(そして間違いであり続けます)。ファイルスコープの変数でstatic
を使用することは、関数スコープの変数で使用する場合とは異なる意味を持つことは非論理的です。
少なくともC++は、スコープにpublic
とprivate
を使用し、生涯にわたってstatic
を保持することで、これに対処しています。