次のコードを試したところ、エラーが発生しました。関数内でextern宣言を使用するとどうなりますか?
int main()
{
//this will cause redefinition error
extern int x;
int x=2;
}
私は、このような
Defining extern variable in main() vs. globally
ようにexternについてのいくつかの答えを見て概念を得たが、私はまだ、コンパイラはこのケースで何をするのか疑問に思ってきました。一部の関数の中でexternを使用することはできますか?
更新:extern int x
は単なる宣言であるため、
は具体的には、なぜ私がint xを定義することはできませんか?コンパイラはextern int x
を定義として受け取りますか?それは使用することができます。もちろん、
'はextern int型X 'でない上、より一般的な情報を提供します。静的格納期間で 'x'を宣言します。 'int x = 2;'自動保存期間、つまりエラーの原因となる 'x'を宣言しようとします –
@MMあなたの意味を正確には理解していませんが、' static int x = 2 '' int x = 2'ではなく、エラーを返します。 – lionel
それから、別のエラーで、異なるリンケージで 'x'を再宣言します –