C Undefined reference
Habe ich einige problem mit der folgenden codes vor allem im header.c wo ich keinen Zugriff auf die extern int variable x in der Kopfzeile.h... Warum? Tut extern-variable in .h nicht global??? Wie kann ich das auf die anderen Dateien?
===header.h===
#ifndef HDR_H
#define HDR_H
extern int x;
void function();
#endif
===header.c===
#include <stdio.h>
#include "header.h"
void function()
{
printf("%d", x); //****undefined reference to x, why?****
}
===Probe.c===
int main()
{
int x = 1;
function();
printf("\n%d", x);
return 0;
}
- möglicherweise entfernen Sie einfach die
int
vorx
in Ihrer main-Funktion. dies würde verhindern, dass eine neue lokale variable in der main-Funktion mit dem gleichen Namen wie die Globale variable - (entfernt; versehentlich Hinzugefügt Kommentar)
- Siehe auch mehr Infos über die extern int im [stackoverflow.com/questions/7610321/... [1]: stackoverflow.com/questions/7610321/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Erklärung
sagt dem compiler, dass in irgendeiner Quellcode-Datei werden Sie eine globalen variable mit dem Namen
x
. Jedoch, in dermain
Funktion deklarieren Sie eine lokalen variablex
. Bewegen Sie, dass die Deklaration außerhalb vonmain
um Sie weltweit.Den
extern
Stichwort sagen, dass die variable existiert, aber nicht erstellen. Der compiler erwartet, dass ein weiteres Modul wird eine Globale variable mit diesem Namen und der linker wird das richtige tun, sich Ihnen anzuschließen, bis.Müssen Sie ändern
sample.c
wie diese:extern
deklariert eine variable, aber nicht definieren. Im Grunde zeigt es den compiler gibt es eine definition fürx
woanders. Zu beheben, fügen Sie den folgenden, umheader.c
(oder einige andere.c
Datei aber nur eine.c
- Datei):Beachten Sie, dass in
main()
die lokale variablex
verstecken wird die Globale variablex
.In der Tat
extern int x;
bedeutetx
definiert werden, die in einem anderen Ort/übersetzung-Einheit.Der compiler erwartet, findet sich eine definition von
x
im globalen Bereich somewherelse.Ich würde Sanieren/ändern Sie Ihren code wie dieser und loszuwerden header.c
===Probe.h===
===Probe.c===