hallo, PSPKing Community!
Ich habe folgendes Problem:
ich will diese 3 dateien kompilieren:
main.c
header.h
laufen.c
Die datei header.h enthält integer, die sowohl in der main-datei selbst, als auch in der laufen-datei wichtig sind.
wenn ich header. h bei beiden Dateien "include", dann spuckt der compilor logischerweise aus, dass die variablen schon definiert sind.
Was kann ich tun?
Danke im Vorraus,
SolidCakeS!
Du kannst die integer Variablen in der header Datei als "static" deklarieren.
z.B. static int zahl;
Variablen müssen wenn Sie in einer header deklariert werden mit dem zusatz
extern angegeben werden.
Sollte dies nicht sein so ist diese deklariert und eine deklarierte variable darf nur einmal vorkommen ansonsten halt der Fehler.
Sollte Sie den Zusatz haben so muss Sie dennoch in einer der *.c deklariert werden.
bsp:
header.h
#ifndef HEADER_H
#define HEADER_H
extern int zahl;
#endif
main.c
....
.....
.....
int main(void)
{
int zahl = 5;
....
....
retun 0;
}
Hier kannst du die variable dann nutzen ohne Sie erneut zu deklarieren.
laufen.c
....
......
void testfunktion()
{
...
pspDebugScreenPrintf("Die Zahl lautet %i", zahl);
...
}
Ich hoffe das das eine gute Erklärung ist. ^^
EDIT: Mist PSP_Lord war schneller, natürlich geht es so auch^^
PS:@ Lord die abfrage und der vergleich funktionieren
EDIT: Mist PSP_Lord war schneller, natürlich geht es so auch^^
PS:@ Lord die abfrage und der vergleich funktionieren
Er war zwar schneller, aber mit statischen variablen kann ich wenig anfangen, da ich die variablen ändern will
Danke!!
Statisch heißt hier nicht, dass sie nicht änderbar sind...es heißt nur dass sie "persisitent" im speicher verbleiben auch wenn die Programmeinheit (wie ein unterprogramm) verlassen wird...
Für globale Variablen ist das fast egal...
Beispiel:
/* das ist die main.c */
static int st_i_1 = 0;
int i_1 = ;
//beides hat keinen wirklichen unterschied...
//ABER:
void funktion( ){
static int st_i_2 = 0;
int i_2 = 0;
st_i_2 ++;
i_2++;
}
//wenn ich nun die funktion aufrufe wird st_i_2 um 1 erhöht und ist damit 1
//ebenso i_2
funktion( );
//wenn ich diese funktion nochmal aufrufe ist der wert von st_i_2 noch gültig...ein weiteres erhöhen macht daraus 2.
//i_2 ist wieder 0 und ein erhöhen führt dazu dass es wieder 1 ist...
funktion( );
Das nur als "Pseudo"-Code um "static" vielleicht etwas anschaulicher zu erklären ;O)
Naja, du kannst statischen Variablen immer noch neue Werte zuweisen, "static" sorgt ja dafür, dass eine Variable nicht immer neu initialisiert wird.
static int i = 0;
i = 2;
Ist legitim und funktioniert.
Edit: du warst schneller, Anmabagima
Oke! danke, jungs!
hab ich wohl was missverstanden.
im programm hab ich jetzt sowiso die lösung von Ceikor benutzt.
funktioniert einwandfrei!