Lokale Funktionen in C/C++ ISO spezifiziert



  • Hallo,

    kann mir hier jemand sagen ob lokale Funktionen zulässig sind und im C und/oder C++ Standard definiert sind?

    void main()
    {
       lokfun()
       {
    
       }
    
       lokfun();
    }
    


  • Nö.


  • Mod

    Das ist weder in C noch in C++ standardisiert. Der GCC kennt es als Erweiterung.

    Alternativen:
    -Lokale structs mit statischen Methoden
    -Globale Funktionen mit lokaler Deklaration
    -Lambda-Ausdrücke



  • Und noch ein Hinweis für dich, int main und NICHT void main.



  • Gugelmoser schrieb:

    Und noch ein Hinweis für dich, int main und NICHT void main.

    Du hast recht, das wusste ich aber.

    SeppJ schrieb:

    Alternativen:
    -Lokale structs mit statischen Methoden
    -Globale Funktionen mit lokaler Deklaration
    -Lambda-Ausdrücke

    Diese alternativen sind standardisiert?
    Sprechen wir hier von diesen alternativen, deklariert in einer Funktion?

    Kannst Du mir zu
    -Lokale structs mit statischen Methoden
    -Globale Funktionen mit lokaler Deklaration
    Beispiele nennen?



  • -Lokale structs mit statischen Methoden:

    int main()
    {
       struct Foo
       {
          static void Bar()
          {
    
          }
       }
       Foo::Bar();
    }
    

    -Globale Funktionen mit lokaler Deklaration:
    Ich denke mal, dass das gemeint ist:

    namespace
    {
       void Bar(){}
    }
    
    int main()
    {
       Bar();
    }
    


  • Ich finde das hier irgendwie ganz schick.

    #include <iostream>
    
    int main()
    {
        using std::cout;
        struct
        {
            int operator()(int i) // edit: http://www.c-plusplus.net/forum/294092
            {
                return i*i;
            }
        }square;
    
        cout << square(5); // square ist nun sozusagen deine lokale Funktion.
    }
    


  • Q schrieb:

    -Globale Funktionen mit lokaler Deklaration:
    Ich denke mal, dass das gemeint ist:

    namespace
    {
       void Bar(){}
    }
    
    int main()
    {
       Bar();
    }
    

    nein, ich glaube eher er meint sowas:

    int main()
    {
        void foo(int);
    
        foo(5);
    
        return 0x0;
    }
    
    void foo(int i)
    {
        // ...
    }
    


  • Skym0sh0 schrieb:

    Q schrieb:

    -Globale Funktionen mit lokaler Deklaration:
    Ich denke mal, dass das gemeint ist:

    namespace
    {
       void Bar(){}
    }
    
    int main()
    {
       Bar();
    }
    

    nein, ich glaube eher er meint sowas:

    int main()
    {
        void foo(int);
    
        foo(5);
    
        return 0x0;
    }
    
    void foo(int i)
    {
        // ...
    }
    

    Das ist ja furchtbar!



  • das ist ne andere sache

    du hat danach gefragt...



  • Skym0sh0 schrieb:

    das ist ne andere sache

    du hat danach gefragt...

    Ja stimmt. Bin Dir auch dankbar dafür!



  • Anaconda55 schrieb:

    Skym0sh0 schrieb:

    Q schrieb:

    -Globale Funktionen mit lokaler Deklaration:
    Ich denke mal, dass das gemeint ist:

    namespace
    {
       void Bar(){}
    }
    
    int main()
    {
       Bar();
    }
    

    nein, ich glaube eher er meint sowas:

    int main()
    {
        void foo(int);
    
        foo(5);
    
        return 0x0;
    }
    
    void foo(int i)
    {
        // ...
    }
    

    Das ist ja furchtbar!

    was ist jetzt daran so furchtbar.
    Ich glaube wenn es so viele verschiedene ansätze gibt , solltest du deine Frage neu formulieren



  • 7xCore schrieb:

    Anaconda55 schrieb:

    Skym0sh0 schrieb:

    Q schrieb:

    -Globale Funktionen mit lokaler Deklaration:
    Ich denke mal, dass das gemeint ist:

    namespace
    {
       void Bar(){}
    }
    
    int main()
    {
       Bar();
    }
    

    nein, ich glaube eher er meint sowas:

    int main()
    {
        void foo(int);
    
        foo(5);
    
        return 0x0;
    }
    
    void foo(int i)
    {
        // ...
    }
    

    Das ist ja furchtbar!

    was ist jetzt daran so furchtbar.
    Ich glaube wenn es so viele verschiedene ansätze gibt , solltest du deine Frage neu formulieren

    Ich finde es sehr unübersichtlich.



  • Anaconda55 schrieb:

    Ich finde es sehr unübersichtlich.

    Und welche Alternative findest du nun annehmbar?



  • Lambda-Ausdrücke finde ich gut.
    Meine Frage war allerdings nur wegen den lokalen Funktionen, aber diese Frage wurde ja bereits beantwortet.



  • Preisfrage: Woran erkennt man dass das Design Kacke ist? 🙄


Log in to reply