13

C で同じ名前の 2 つのグローバル変数を宣言しました。同じストレージ クラスで同じ名前の変数を宣言できないため、エラーが発生するはずです。

C++ で確認しました — コンパイル時エラーが発生しますが、C では発生しません。なぜですか?

コードは次のとおりです。

int a;
int a = 25;
int main()
{

   return 0;
}

で確認してください: Ideone で書かれたコード

多分これが原因だと思う

C での宣言と定義

しかし、これは C++ には当てはまりません。C++ では、変数がグローバル スコープで宣言されているかオート スコープで宣言されているかに関係なく、宣言と定義が同時に行われていると思います。

誰かがそれにもう少し光を当てることができますか.

変数を 2 回定義して値を 2 回指定すると、エラーが発生します (1 つの宣言と 1 つの定義ではなく)。

コード :現在 2 つの定義

int a;
int a;
int a;
int a = 25;

int main()
{
return 0;
}
4

2 に答える 2

13

C では、複数のグローバル変数が 1 つに「マージ」されます。したがって、複数回宣言されたグローバル変数は 1 つだけです。externこれは、C で必要とされなかった (またはおそらく存在しなかった - よくわからない)時代にまでさかのぼります。

言い換えれば、これは歴史的な理由から C で有効であるため、C の ANSI 標準が存在する前に記述されたコードをコンパイルすることができます。

ただし、コードを C++ で使用できるようにするためには、これを避けることをお勧めします。

于 2013-06-30T08:13:45.537 に答える