Warum gibt die Initialisierung einer externen Variablen innerhalb einer Funktion einen Fehler?

Dieser code kompiliert fein:

extern int i = 10;

void test()
{
    std::cout << "Hi" << i << std::endl;
}

Während dieser gibt einen Fehler:

void test()
{
    extern int i = 10;
    std::cout << "Hi" << i << std::endl;
}

Fehler: "i" hat sowohl "extern" und Initialisierer

Lese ich in C++ Primer

Jede Erklärung, die einen expliziten Initialisierer ist eine definition.
Wir bieten eine Initialisierung auf eine definierte variable als extern deklariert, aber
dabei überschreibt die extern. Eine extern, ein-Initialisierer ist ein
definition. Es ist ein Fehler, um eine Initialisierung auf eine extern-innen ein
Funktion
.

Kann jemand eine Erklärung warum sollte das ein Fehler sein wenn man es lokal in einer Funktion, während die gleiche ist erlaubt, in einem globalen Rahmen?

InformationsquelleAutor der Frage Amit Tomar | 2013-06-13

Schreibe einen Kommentar