verschachtelte funktion aus anderer datei?
-
hallo,
leider stehe ich gerade etwas auf dem schlauch....ich würde gerne eine funktion aus der main-funktion in einer anderen datei benutzen.
sieht also im prinzip so aus:
main.c:
int main(int argc, char *argv[]) { int play(void) { ... } ... }
playsong.c:
void musicFinished(void) { ... play(); ... }
in beiden dateien binde ich einen header ein. kompiliert wird mit
alles: playsong.o main.o
gcc $(CFLAGS) $(GTK) $(TAG) $(SDL) -o alles playsong.o main.oplaysong.o: playsong.c
gcc $(CFLAGS) $(GTK) $(TAG) $(SDL) -c playsong.cmain.o: main.c
gcc $(CFLAGS) $(GTK) $(TAG) $(SDL) -c main.cdoch nun bekomme ich immer die fehlermeldung:
playsong.o: In functionmusicFinished': playsong.c:(.text+0x3ce): undefined reference to
play'...ist ja auch logisch, nur wie kann man den fehler beheben?
gruß
martinEDIT: play() aus main() rausholen geht leider nicht
-
Hallo,
inspire schrieb:
...
EDIT: play() aus main() rausholen geht leider nichtWarum nicht? Das geht, das muss gehen.
Gruß,
B.B.
-
Du kannst keine funktion in einer andere funktion deklarieren
davon kriegt man ja augenschmerzen XD[cpp]
main.c:int play(){
/* do want you want*/
}int main{
return 1;
}paylist.c:
int bla(){
play();
}
-
inspire schrieb:
ich würde gerne eine funktion aus der main-funktion in einer anderen datei benutzen.
The nested function's name is local to the block where it is defined.
If you try to call the nested function through its address after the containing function has exited, all hell will break loose.
-
Okay, danke euch
Dann bleibt mir wohl nichts anderes übrig als....Arbeit ^^
Gruß
Martin
-
nest0r schrieb:
The nested function's name is local to the block where it is defined.If you try to call the nested function through its address after the containing function has exited, all hell will break loose.
^^theatralisch formuliert aber eigentlich doch quatsch. bei 'nested functions' ist ja nur der name innerhalb einer anderen funktion versteckt, mehr steckt nicht dahinter. in C gibts sowas einfach nicht. gäbe es das, dann könnte man zugriffe auf lokale variablen der äusseren funktion entweder ausschliessen, oder für undefiniert erklären, wenn die innere funktion von ausserhalb der äusseren funktion (über einen function-pointer) aufgerufen wird.