私の現在の「静的」キーワードの理解は、変数の再初期化を防ぎ、関数の終了時に変数がメモリから離れることを防ぎます。Cのmain関数で静的変数を使用するのは意味がありますか?
Cでは、通常、変数をグローバルにする必要はないが、関数呼び出しの間では変更しないでください。
は今、STM32のためのいくつかのCコードで、私は次のことを見た(f.i.マイクロコントローラが割り込み):
int main(void)
{
static char buffer[CONSOLEBUFFERSIZE];
...
私にとって、これは意味がありません。この変数は、着信コマンドをバッファリングするために使用され、終了文字が受信されたときに処理されます。しかし、前に説明した '静的'の2つのプロパティはmain()が一度だけ呼び出され、 'never'が終了するためmain関数には適用されません。だから私の実際の質問:
これは、私が知りませんか、または単に割り込みや他の機能からコードをコピーし、プログラマが静的キーワードを削除することを忘れてしまった?
CONSOLEBUFFERSIZEがVery Largeの場合、スタックがオーバーフローする可能性があるため、静的は安全です。 – sigmalha
Cコンパイラは、スタック領域に 'main()'の変数を入れる義務はありません。したがって、変数を「スタック」から「データ」セグメントに移動するために「静的」を使用することは、コンパイラの実装に依存する。 'static'は、いくつかの答えによって示唆されるようにセグメントを変更するかもしれません。それは効果がないかもしれません。 – chux