Funktion innerhalb von main() deklariert bei C



  • Hallo,

    ich habe letztens in einer Übung zum Thema Funktionen gesehen, dass zwei Leute eine Funktion innerhalb der main-Funktion deklarieren wollten, also:

    int main()
    {
    ...
    
        void tolleFunktion()
        {
        ...
        }
    
    ...
    
    return 0;
    }
    

    Bei dem einen lief es ohne Fehler, beim anderen kam als Fehler "declaration within "{" not allowed" (oder zumindest so ähnlich), was ich auch erwartet hatte. Die IDE ist Dev-cpp, allerdings hatten beide es auch als .c-Datei gespeichert. Wie kann es jetzt sein, dass er das bei dem einen "gefressen" hat? Das muss ja irgendwie an Dev-cpp liegen, dass es irgendwie als c++ interpretiert wurde, anders kann ich es mir nicht erklären. Hat jemand vielleicht sonst noch eine Idee (weil mir sowas, um ehrlich zu sein, vorher nie in den Sinn kam)?!

    Viele Grüße



  • In C++ geht das auch nicht, aber es könnte sein, dass das eine gcc-Erweiterung ist.



  • mein Gedankengang bzgl c++ war, dass ich ja innerhalb von Klassen Methoden angeben kann etc. Hmm, komische sache in meinen Augen...



  • Schon. Wenn du in einer Funktion eine lokale Klasse definierst, kann die auch wieder Funktionen enthalten. Aber direkt Funktion-in-Funktion geht eben nicht.
    Falls das beim gcc eine Erweiterung ist (was mich nicht wundern würde, ich aber auch nicht nachprüfen kann im Moment), liegt der Unterschied daran, dass der eine mit -ansi und der andere ohne compiliert.



  • hm, das ist natürlich ein interessanter Gedankengang. Ich werde es bei Gelegenheit auch mal versuchen zu überprüfen, vielen Dank! 🙂



  • Deklaration oder Definition?
    Deklarationen sind überall möglich, Definitionen standardgemäß nur außerhalb von Codeblöcken (compound statements).



  • Nachdem jetzt doch noch ein Fall hier aufgetaucht ist:
    Fehler bei einem Greedy Programm

    Hier ein kurzes Testprogramm

    #include<stdio.h>
    
    int main()
    {
    
      int i,y;
    
      int zaehle(int x) 
      { for (i=0;i<x;i++);
        return i;
      }
      y= 10; printf ("%d; %d; %d\n", y, zaehle(y), i); 
      y= 20; printf ("%d; %d; %d\n", y, zaehle(y), i); 
    
      return 0;
    }
    

    Output schrieb:

    10; 10; 10
    20; 20; 20

    Zumindest codepad.org übersetzt das so.

    Ist das so gewollt oder nur eine freie Auslegung von "Frei platzierbare Deklaration von Bezeichnern"?



  • "warning: ISO C forbids nested functions"
    

    Dem ist eigentlich nichts hinzuzufügen, außer dass defaultmäßig der GCC nur eine Warnung draus macht.


Anmelden zum Antworten