3 Stimmen

Mehrere Deklarationen und Definitionen

Inhalt von X.c:

int i;
main ()
{
fun ();
}

Inhalt von Y.c:

int i;
fun ()
{
}

Warum kompilieren diese beiden Dateien ohne Fehler? (mit GCC)

Aber wenn ich int i = 10; benutze, wird ein Fehler für multiple Definitionen ausgegeben.

3voto

Pascal Cuoq Punkte 77147

Sie könnten an dieser Frage und den Antworten interessiert sein. Stichwörter: "vorläufige Definition".

Vorläufige Definitionen in C99 und Verlinkung

1voto

Andy Dent Punkte 16955

Vorausgesetzt, Sie wirklich wollen eine unabhängige Variable namens i in beiden Dateien haben, müssen Sie sie mit static präfixieren, um ihnen interne Verknüpfung zu geben.

static int i = 10;

Wenn Sie möchten, dass i dieselbe Variable in beiden Dateien ist, sodass Änderungen in einer die andere beeinflussen, verwenden Sie die Antworten, die Ihnen vor 3 Stunden gegeben wurden, als Sie eine Variante der Frage gestellt haben. Wenn sie geteilt werden soll, müssen Sie die Variable an einer Stelle definieren.

Warum es keinen Fehler verursacht hat, ohne die Initialisierung, denke ich, dass liegt daran, dass Sie die Variable nicht verwendet haben, bis sie initialisiert werden musste und der Compiler sie daher ignoriert hat.

-1voto

Pieter Punkte 2737

Weil es einen Unterschied zwischen einer Deklaration und einer Definition gibt. int i; tut nichts weiter, als einen Namen einzuführen. int i = 10; definiert dagegen i, daher muss ein Speicherplatz reserviert werden, um den Wert zu speichern, zu dem er gehört. Aber es ist unmöglich für den Compiler zu wissen, welcher Wert zu i gehört, da Sie zwei Speicherorte mit dem Namen i verknüpfen möchten.

Dies basiert auf der Annahme, dass Sie diese Dateien miteinander verknüpfen, was aus Ihrer Erklärung nicht ganz klar wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X