このトピックには、以下の事項の説明が含まれています。
auto 変数 (関数仮パラメーターを除く) は、初期化できます。 自動オブジェクトを明示的に初期化しない場合は、その値は確定できません。 初期値を提供する場合は、初期値を表す式を C の有効な式にすることが できます。オブジェクトの定義を含むプログラム・ブロックに入るたびに、 オブジェクトはその初期値にセットされます。
goto ステートメントを使用し、ブロックの中央にジャンプする場合は、 そのブロック内の自動変数は初期化されないことに留意してください。
静的オブジェクトの初期化は、定数式、 または既に extern または static と宣言されているオブジェクトのアドレスに変換する式 (多くの場合、定数式によって変更されます) を使用して実行できます。 静的 (または外部) 変数を明示的に初期化しない場合、それがポインターでなけれ ば、その初期値は、該当する型の値ゼロになります。その変数がポインターの場合は、NULL に初期化されます。
ブロック内の static 変数は、プログラム実行の前に 1 回初期化されるだけですが、初期化指定子を持つ auto 変数は、それが存在するようになるたびに初期化されます。
extern 変数を明示的に初期化しない場合は、その初期値は、該当する型のゼロになります。 extern オブジェクトの初期化は、プログラムが実行を開始するときまでに完了しています。
関数仮パラメーターを除く register オブジェクトを初期化できます。自動オブジェクトを初期化しない場合は、 その値は確定できません。初期値を提供する場合は、初期値を表す式を C の有効な式にすることが できます。オブジェクトの定義を含むプログラム・ブロックに入るたびに、 オブジェクトはその初期値にセットされます。