Erstellen Sie extern char-array in C
Erstellung eines externen Zeichen-array in C?
Habe ich versucht verschiedene Möglichkeiten zum definieren char cmdval[128]
aber es sagt immer undefined reference to 'cmdval'
Ich möchte einen string in cmdval in first.c
- Datei und verwenden Sie es in anderen second.c
- Datei. Ich habe versucht, das hinzufügen einer global.h
- Datei mit extern char cmdval[128]
aber kein Glück.
UPDATE:
global.h
extern char cmdval[128];
ersten.c
#include "global.h"
char cmdval[128];
function(){
strcpy(cmdval, "a string");
}
Sekunde.c
#include "global.h"
function(){
printf("%s \n",cmdval); //error
}
FAIL 🙁 "undefined reference to `cmdval'"
BEARBEITEN:
Ich arbeite in linux (Bearbeitung eines mini-OS xv6 dann kompilieren und es läuft in qemu), ich weiß nicht, ob es eine Schranke
InformationsquelleAutor der Frage SMUsamaShah | 2011-10-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie es erklären .h-Datei
Und definieren dann den Wert in der ersten.c;
Dann alles das beinhaltet Ihre .h-Datei, sofern es ist verbunden mit der ersten.o Zugriff darauf.
Erarbeiten, "extern" sagt, es ist eine externe variable, diese wird Referenz - ... wenn Sie nicht, dann erklären cmdval irgendwo, cmdval nie existieren wird, und die externe Referenz wird nie Referenz nichts.
Beispiel:
global.h:
ersten.c:
Sekunde.c:
Kompilieren Sie dies mit:
Oder machen die .o-Dateien und verlinken Sie Sie
InformationsquelleAutor der Antwort Geoffrey
Sollten Sie eine Zusammenstellung, in welcher Einheit Sie definieren die
cmdval
variable. Dieextern
Stichwort nur erklärtdass die variable existiert, kann man es nicht definieren.Fügen Sie die folgende Zeile in
first.c
second.c
oder in einer anderen C-Datei Ihrer Wahl:InformationsquelleAutor der Antwort
Extern
bedeutet nicht, finde es irgendwo, es ändert sich die variablelinkage
zuexternal
was bedeutet, dass egal, wie viele mal, wenn Sie eine variable deklarieren, verweist es auf das gleiche hinaus.z.B. Diese bezieht sich auf dieselbe Sache, die in c(nicht c++), eine Globale variable Verknüpfung ist standardmäßig
external
.Das problem ist, dass sollte man zuerst kompilieren Sie in .o, dann verknüpfen Sie diese .o zusammen.
oder
InformationsquelleAutor der Antwort lostyzd
In
second.c
definieren
extern char cmdval[128]
imglobal.h
als gut.InformationsquelleAutor der Antwort Pete Houston