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.
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.
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.
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 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.