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.o

    playsong.o: playsong.c
    gcc $(CFLAGS) $(GTK) $(TAG) $(SDL) -c playsong.c

    main.o: main.c
    gcc $(CFLAGS) $(GTK) $(TAG) $(SDL) -c main.c

    doch nun bekomme ich immer die fehlermeldung:
    playsong.o: In function musicFinished': playsong.c:(.text+0x3ce): undefined reference toplay'

    ...ist ja auch logisch, nur wie kann man den fehler beheben?

    gruß
    martin

    EDIT: play() aus main() rausholen geht leider nicht 😉



  • Hallo,

    inspire schrieb:

    ...
    EDIT: play() aus main() rausholen geht leider nicht 😉

    Warum 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.

    Geht nicht.

    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.
    🙂


Anmelden zum Antworten