Windows システムではなく、組み込みシステムで作業しています。
私は宣言する:
static uint_8 i = 0;
したがって、i は開始時に 0 と定義されます。
質問: リセット後に 0 として再定義されますか、それとも RAM アドレスでジャンク情報を取得しますか? たとえば、i を 0 として再定義する init 関数を作成する必要がありますか?
ありがとう
これは、ランタイム ライブラリ (存在する場合) によって異なります。既存のランタイム ライブラリがある場合、おそらく起動時に静的データがゼロに初期化されます (前main()
)。ただし、一部の組み込みシステムではランタイム ライブラリが完全にサポートされていない場合があるため、自分で行う必要がある場合があります。
いいえ、その必要はありません。すべての静的変数は、プログラムの開始時に 0 に初期化されることが保証されています。
C 標準 ISO/IEC 9899:TC2 では、これを次のように定義しています。
6.2.4 オブジェクト
の保存期間 外部リンケージまたは内部リンケージ、またはストレージ クラス指定子 static で宣言された識別子を持つオブジェクトは、静的な保存期間を持ちます。その存続期間はプログラムの実行全体であり、格納された値はプログラムの起動前に一度だけ初期化されます。