|
Verfasser |
Nachricht |
SolidCakeS
Junior Mitglied
Beiträge: 20
Gruppe: User
Registriert seit: Feb 2011
Status:
Offline
Danke erhalten: 0
|
Header.h includen, aber wo?
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!
|
|
22.02.2011 14:36 |
|
|
|
PSP_Lord
Durchstarter
Beiträge: 87
Gruppe: User
Registriert seit: Sep 2010
Status:
Abwesend
Danke erhalten: 133
|
RE: Header.h includen, aber wo?
Du kannst die integer Variablen in der header Datei als "static" deklarieren.
z.B. static int zahl;
|
|
22.02.2011 15:12 |
|
Folgende User bedanken sich: |
|
Ceikor
Ex-Developer
Beiträge: 581
Gruppe: User
Registriert seit: Dec 2008
Status:
Abwesend
Danke erhalten: 701
|
RE: Header.h includen, aber wo?
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
Dieser Beitrag wurde zuletzt bearbeitet: 22.02.2011 15:18 von Ceikor.
|
|
22.02.2011 15:13 |
|
Folgende User bedanken sich: |
|
SolidCakeS
Junior Mitglied
Beiträge: 20
Gruppe: User
Registriert seit: Feb 2011
Status:
Offline
Danke erhalten: 0
|
RE: Header.h includen, aber wo?
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!!
|
|
22.02.2011 15:18 |
|
|
|
anmabagima
Ex-Developer
Beiträge: 348
Gruppe: User
Registriert seit: Dec 2009
Status:
Offline
Danke erhalten: 530
|
RE: Header.h includen, aber wo?
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)
|
|
22.02.2011 15:48 |
|
Folgende User bedanken sich: |
|
PSP_Lord
Durchstarter
Beiträge: 87
Gruppe: User
Registriert seit: Sep 2010
Status:
Abwesend
Danke erhalten: 133
|
RE: Header.h includen, aber wo?
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
Dieser Beitrag wurde zuletzt bearbeitet: 22.02.2011 22:46 von PSP_Lord.
|
|
22.02.2011 15:49 |
|
Folgende User bedanken sich: |
|
SolidCakeS
Junior Mitglied
Beiträge: 20
Gruppe: User
Registriert seit: Feb 2011
Status:
Offline
Danke erhalten: 0
|
RE: Header.h includen, aber wo?
Oke! danke, jungs!
hab ich wohl was missverstanden.
im programm hab ich jetzt sowiso die lösung von Ceikor benutzt.
funktioniert einwandfrei!
|
|
22.02.2011 22:35 |
|
|
|