4

Windows システムではなく、組み込みシステムで作業しています。

私は宣言する:

static uint_8 i = 0;

したがって、i は開始時に 0 と定義されます。

質問: リセット後に 0 として再定義されますか、それとも RAM アドレスでジャンク情報を取得しますか? たとえば、i を 0 として再定義する init 関数を作成する必要がありますか?

ありがとう

4

2 に答える 2

3

これは、ランタイム ライブラリ (存在する場合) によって異なります。既存のランタイム ライブラリがある場合、おそらく起動時に静的データがゼロに初期化されます (前main())。ただし、一部の組み込みシステムではランタイム ライブラリが完全にサポートされていない場合があるため、自分で行う必要がある場合があります。

于 2012-08-01T07:55:37.127 に答える
0

いいえ、その必要はありません。すべての静的変数は、プログラムの開始時に 0 に初期化されることが保証されています。

C 標準 ISO/IEC 9899:TC2 では、これを次のように定義しています。

6.2.4 オブジェクト
の保存期間 外部リンケージまたは内部リンケージ、またはストレージ クラス指定子 static で宣言された識別子を持つオブジェクトは、静的な保存期間を持ちます。その存続期間はプログラムの実行全体であり、格納された値はプログラムの起動前に一度だけ初期化されます。

于 2012-08-01T07:55:59.900 に答える