KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: Header.h includen, aber wo?
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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

Code:
#ifndef HEADER_H
#define HEADER_H

extern int zahl;

#endif


main.c

Code:
....
.....
.....
int main(void)
{
int zahl = 5;
....
....
retun 0;
}


Hier kannst du die variable dann nutzen ohne Sie erneut zu deklarieren.

laufen.c

Code:
....
......
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 Wink

Ceikor :

EDIT: Mist PSP_Lord war schneller, natürlich geht es so auch^^

PS:@ Lord die abfrage und der vergleich funktionieren Wink


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:

PHP-Code:
/* 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 Wink
Oke! danke, jungs!
hab ich wohl was missverstanden.
im programm hab ich jetzt sowiso die lösung von Ceikor benutzt.
funktioniert einwandfrei!
Referenz-URLs