web-dev-qa-db-ja.com

「静的」関数の語源

静的ローカル変数が「静的」と呼ばれる理由がわかります。静的メモリに割り当てたいのです。しかし、現在のファイル「静的」に制限したい関数と変数を呼び出す理由は何ですか?接続がわかりません。いずれにせよ、それらは静的メモリに割り当てられますよね?

5

staticキーワードは複数の意味でオーバーロードされており、どの意味が適用されるかは、それが表示される場所によって異なります。これは、オブジェクトのストレージ期間(ライフタイム)とリンケージの両方に影響します。 )ファイルスコープで宣言された関数のオブジェクトに関連付けられた識別子。

詳細については、 C11標準 のオンラインドラフトの「6.2.2識別子のリンク」および「6.2.4オブジェクトの保存期間」を参照してください。

staticキーワードは、ファイルスコープ(関数の本体の外部)で宣言された関数およびオブジェクト識別子のリンケージにのみ影響することに注意してください-関数またはブロック内で宣言された識別子(およびexternキーワードなし)リンケージはありません。

3
John Bode

静的ローカル変数が「静的」と呼ばれる理由がわかります-静的メモリに割り当ててほしい

いいえ。 staticキーワードは、Cプログラミング言語の初期の頃にさかのぼります アイテムのスコープと有効期間の両方を指定できます

Cによって「触発された」言語は、staticキーワードをコピーし、その「存続期間」の意味で使用しました。静的メンバーは通常、アプリケーションの実行全体の存続期間があります。

1
David Arno

Cでは、用途に応じて、staticおよびexternキーワードは変数のスコープまたは存続期間を示します。

私見、これは間違いでした(そして間違いであり続けます)。ファイルスコープの変数でstaticを使用することは、関数スコープの変数で使用する場合とは異なる意味を持つことは非論理的です。

少なくともC++は、スコープにpublicprivateを使用し、生涯にわたってstaticを保持することで、これに対処しています。

0
Andrew