Hallo,
ich habe ein Problem mit der Programmiersprache C.
Es geht darum, eine globale Variable in mehreren Quelltextdateien
zu benutzen.
Hier mal ein Demo-Beispiel rund um die Variable "myGlobal", um zu
verdeutlichen was ich meine:
Compilieren und Testen:
-----------------------
leanUX@linux:~/prog/C/test> gcc -o testglobal file1.c file2.c file3.c
leanUX@linux:~/prog/C/test> ./testglobal
myGlobal (in main): 1
myGlobal (in func2) 1
myGlobal (in main, nach func2): 2
myGlobal (in func3) 2
myGlobal (in func2) 3
myGlobal (in main, nach func3 und func2): 4
Wie man sieht funktioniert das Beispiel genau so wie es soll.
Das eigentliche Problem stellt sich jetzt, wenn ich dies bei einem groesseren Projekt
versuche. Und zwar habe ich vor, die Sourcen des sshd etwas anzupassen, um eine
zweistufige Passwortabfrage einzubauen. Am einfachsten ist es hierzu u.a. globale (integer)
Status-Variablen zu verwenden. Das Verrueckte ist nun, wenn ich wie im obigen Demo-Beispiel
globale Variablen einfuehre, dann werden die (per "extern" importierten) Variablen in den
anderen Quelltextdateien zwar richtig gelesen, d.h. der richtige Wert wird per "debug" ausgegeben,
egal auf welchen Wert sie vorbelegt wurden.
Ich kann die Variable auch veraendern, und die veraenderte Variable _gleich_ per debug ausgeben,
aber nur solange sich alles in der selben Quelltextdatei abspielt.
Sobald aber Code aus einer anderen Quelltextdatei ausgefuehrt wird, sind dort die zuvor
durchgefuehrten Veraenderungen an der globalen Variablen unwirksam geworden, sie hat wieder den
Wert der Vorbelegung.
Hat jemand eine Idee weshalb hier das Veraendern der globalen Variablen nicht funktionieren will?
Ich habe (aus Verzweifelung) schon "volatile" probiert, auch habe ich, um nicht irgend einem
Make-Fehler auzusitzen, alle Dateien per "touch" aufs gleich Datum gebracht, alle *.o-Dateien
geloescht und alles neu compiliert; leider ohne Erfolg.
Also fuer einen Tipp waere ich wirklich dankbar.
ich habe ein Problem mit der Programmiersprache C.
Es geht darum, eine globale Variable in mehreren Quelltextdateien
zu benutzen.
Hier mal ein Demo-Beispiel rund um die Variable "myGlobal", um zu
verdeutlichen was ich meine:
Code:
/* --------------- Datei file1.c -----------------*/
#include <stdio.h>
int myGlobal; /* Definition einer globalen Variablen */
extern func2(void); /* Verweis auf eine extern definierte Funktion */
extern func3(void); /* Verweis auf eine extern definierte Funktion */
int main(void)
{
myGlobal=1;
printf("myGlobal (in main): %d\n", myGlobal);
func2(); /* ändere myGlobal */
printf("myGlobal (in main, nach func2): %d\n", myGlobal);
func3();
func2();
printf("myGlobal (in main, nach func3 und func2): %d\n", myGlobal);
return 0;
}/* -------------- Ende Datei file1.c -------------*/
/* --------------- Datei file2.c -----------------*/
#include <stdio.h>
extern int myGlobal; /* Verweis auf extern definierte
globale Variable */
void func2(void)
{
printf("myGlobal (in func2) %d\n", myGlobal);
myGlobal++;
}/* -------------- Ende Datei file2.c ------------*/
/* --------------- Datei file3.c -----------------*/
#include <stdio.h>
extern int myGlobal; /* Verweis auf extern definierte
globale Variable */
void func3(void)
{
printf("myGlobal (in func3) %d\n", myGlobal);
myGlobal++;
}/* -------------- Ende Datei file3.c ------------*/
Compilieren und Testen:
-----------------------
leanUX@linux:~/prog/C/test> gcc -o testglobal file1.c file2.c file3.c
leanUX@linux:~/prog/C/test> ./testglobal
myGlobal (in main): 1
myGlobal (in func2) 1
myGlobal (in main, nach func2): 2
myGlobal (in func3) 2
myGlobal (in func2) 3
myGlobal (in main, nach func3 und func2): 4
Wie man sieht funktioniert das Beispiel genau so wie es soll.
Das eigentliche Problem stellt sich jetzt, wenn ich dies bei einem groesseren Projekt
versuche. Und zwar habe ich vor, die Sourcen des sshd etwas anzupassen, um eine
zweistufige Passwortabfrage einzubauen. Am einfachsten ist es hierzu u.a. globale (integer)
Status-Variablen zu verwenden. Das Verrueckte ist nun, wenn ich wie im obigen Demo-Beispiel
globale Variablen einfuehre, dann werden die (per "extern" importierten) Variablen in den
anderen Quelltextdateien zwar richtig gelesen, d.h. der richtige Wert wird per "debug" ausgegeben,
egal auf welchen Wert sie vorbelegt wurden.
Ich kann die Variable auch veraendern, und die veraenderte Variable _gleich_ per debug ausgeben,
aber nur solange sich alles in der selben Quelltextdatei abspielt.
Sobald aber Code aus einer anderen Quelltextdatei ausgefuehrt wird, sind dort die zuvor
durchgefuehrten Veraenderungen an der globalen Variablen unwirksam geworden, sie hat wieder den
Wert der Vorbelegung.
Hat jemand eine Idee weshalb hier das Veraendern der globalen Variablen nicht funktionieren will?
Ich habe (aus Verzweifelung) schon "volatile" probiert, auch habe ich, um nicht irgend einem
Make-Fehler auzusitzen, alle Dateien per "touch" aufs gleich Datum gebracht, alle *.o-Dateien
geloescht und alles neu compiliert; leider ohne Erfolg.
Also fuer einen Tipp waere ich wirklich dankbar.