2017-01-05 5 views
-2
extern int a = 10; // it is not giving error 
int main() 
{ 
extern int b = 10; //it is giving error 
return 0; 
} 

エラー: 'b'に 'extern'とイニシャライザの両方があります。 extern int b = 10;なぜextern int a;初期化ではローカルにエラーが発生しますが、

+0

externキーワードは何ですか? –

+0

@Artur Hmmm ...関数内でextern宣言が可能で、グローバルなオブジェクト(外部リンケージあり!)を他の場所で定義していると思います。例:ローカル関数宣言のために。私は初期化することはできないと思いますが、これは*定義*の時点でのみ可能です。つまり、メモリが割り当てられる場所です。 –

+0

@ Garf365正しいですが、これはC++です。これはCです。私たちはCデュプリを得ることができますか? :) –

答えて

1

C11(N1570)6.7.9/5 初期を参照:

If the declaration of an identifier has block scope, and the identifier has external or internal linkage, the declaration shall have no initializer for the identifier.

ルールは、制約部内に配置されるので、任意の適合コンパイラは、それに違反するコードを、拒否すべきです。

ブロックスコープでのexternキーワードのポイントは、になります。スコープの外にある既存のオブジェクトを宣言します。オブジェクトを宣言し、宣言の時点で他の値を与えることは、あまり意味がありません。

外部オブジェクトを宣言するための推奨される方法は、宣言をファイルスコープ(ソースコードの最上部)に置くことです。メンテナンスプログラマーが容易に見つけて管理することができます。

関連する問題