7

グローバル変数がgccで初期化されていないかどうかを知る/警告する方法はありますか?

ローカル/アトミック変数「-Wuninitialized」</p>で取得しました

4

3 に答える 3

9

いいえ!
コードでC標準で義務付けられているように明示的に行わない場合、グローバル変数と静的変数は暗黙的に初期化されます。
つまり、グローバル変数と静的変数が初期化されないままになることはありません。

于 2012-06-07T07:15:53.453 に答える
5

6.9.2外部オブジェクトの定義

セマンティクス

1オブジェクトの識別子の宣言にファイルスコープと初期化子がある場合、その宣言は識別子の外部定義です。

2初期化子がなく、ストレージクラス指定子がない、またはストレージクラス指定子が静的であるファイルスコープを持つオブジェクトの識別子の宣言は、暫定的な定義を構成します。翻訳ユニットに識別子の1つ以上の仮定義が含まれ、翻訳ユニットにその識別子の外部定義が含まれていない場合、動作は、翻訳ユニットにその識別子のファイルスコープ宣言が含まれている場合とまったく同じです。 0に等しい初期化子を使用して、変換単位の終わりの。

上記の2つの句(標準から)は、ファイルスコープ(グローバル)オブジェクトが常に初期化されることを保証します。

于 2012-06-07T07:25:33.637 に答える
3

いいえ、gccはすべてのグローバル変数と静的変数を自動的に「0」に初期化するためです。

于 2012-06-07T07:16:08.320 に答える