2016-11-04 6 views
2

私はANSI Cプログラミング言語を研究していましたが、導入時にはこう書いています:グローバル変数はCの自動変数にありますか?

"ローカル変数は一般に"自動 "であるか、呼び出すたびに新たに作成されます。

変数の割り当てと割り当て解除は、javaのスタックフレームロジックで動作すると思います。グローバル変数も自動化されていますか?スタックフレームの出入りは、.cファイル全体の範囲内にあるので、ローカル変数よりもはるかに少なくなります。私はあなたが他のファイルから呼び出す変数の範囲がどのように機能するのかわかりません。

+0

グローバル変数には固定アドレスがあり、自動ではありません。それらはプログラムの開始時に割り当てられ、実行中にそのように保持されます。 –

+0

いいえ。ファイルスコープオブジェクトには、静的な記憶期間があります。 – EOF

+2

いいえ: 'static 'や' register'(または 'extern')キーワードのない関数の中で定義された変数は' auto'変数です。理論的には、キーワード 'auto'を接頭辞として使用できます。もしあなたが実際にキーワードを追加するならば、あなたは撃たれるべきです(目撃者C++は完全に別の目的のために完全に取り上げています)。そして、あなたはC言語のキーワードを見いだすと、 'auto'を書いた人を彼らの邪悪なやり方を悔い改めさせる。 –

答えて

2

いいえ、これらの概念はお互いに遊びません。グローバル変数という言葉は、外部リンクを持つ変数を指す非公式の概念です。定義上、自動変数にはリンケージがないため、変数を持つことは意味がありません。変数は自動とグローバルの両方です。

+0

グローバルとローカルの別の違いは、グローバルがゼロで初期化されているということですデフォルトでは、私が間違っていない場合、地元の人々はデフォルトで初期化されますが、プリミティブ型の場合は未定義の値を意味します。 –

+1

@ Peregring-lk:グローバルについてはそうだ。複数の記憶域クラス指定子があるため、地方の場合はより複雑です。たとえば、 'static'キーワードを持つローカル変数もゼロで初期化されます。 OTOHでは、自動変数(暗黙の 'auto'指定子を持つもの)は暗黙の初期化を持たず、明示的に値が代入されるまでは不確定です。 –

関連する問題