80k
評判の寄稿者R..は SO で私に、関数の戻り値は定数とは見なされないため、グローバル変数を初期化することはできず、グローバル変数は定数で初期化する必要があると言いました.そして彼の言葉に忠実です.予想どおり、このプログラムの次のエラー-- プログラムは次のとおりinitializer element is not a constant
です。
#include<stdio.h>
int foo();
int gvar=foo(); //ERROR
int main()
{
printf("%d",gvar);
}
int foo()
{
return 8;
}
しかし、このコンテキストでは、上記のプログラムの次の変更されたバージョンがエラーをまったく表示せず、正常に動作する理由がわかりません。この 2 番目のプログラムでは、同じ関数の戻り値で同じグローバル変数を初期化していますfoo()
。結果がこのように変動する厳密な技術的理由を教えていただけますか?宣言時に関数の戻り値を使用してグローバル変数を初期化するとエラーが発生するのに、同じ戻り値を使用した同じ初期化を内部から実行すると正常に機能するのはなぜですか?関数?
#include<stdio.h>
int foo();
int gvar;
int main()
{
gvar=foo();
printf("%d",gvar);
}
int foo()
{
return 8;
}
出力 8