12 Stimmen

Ist es möglich in C oder C++, eine Funktion innerhalb einer anderen Funktion zu erstellen?

Könnte mir jemand bitte sagen, ob dies in C oder C++ möglich ist?

void fun_a();
//int fun_b();
...
main(){
   ...
   fun_a();
   ...
   int fun_b(){
     ...
   }
   ...
} 

oder etwas Ähnliches, wie z.B. eine Klasse innerhalb einer Funktion?

Vielen Dank für eure Antworten,

1voto

JonM Punkte 822

Es ist nicht möglich, eine Funktion innerhalb einer Funktion zu deklarieren. Sie können jedoch eine Funktion innerhalb eines Namensraums oder innerhalb einer Klasse in C++ deklarieren.

1voto

caf Punkte 224189

Nicht in standard C, aber gcc und clang unterstützen sie als Erweiterung. Siehe das Online-Handbuch von gcc.

1voto

Jerry Coffin Punkte 452852

Obwohl sowohl C als auch C++ verschachtelte Funktionen verbieten, unterstützen sie einige Compiler dennoch (z. B. kann, wenn ich mich recht erinnere, gcc dies zumindest mit den richtigen Flags). Ein verschachteltes Funktor ist jedoch viel portabler.

1voto

zaharpopov Punkte 16052

Leider keine verschachtelten Funktionen in C/C++.

1voto

Michael Burr Punkte 320591

Wie bereits in anderen Antworten erwähnt, erlauben Standard-C und C++ nicht, dass Sie verschachtelte Funktionen definieren. (Einige Compiler können dies als Erweiterung zulassen, aber ich kann nicht sagen, dass ich es gesehen habe).

Sie können eine andere Funktion innerhalb einer Funktion deklarieren, damit sie aufgerufen werden kann, aber die Definition dieser Funktion muss außerhalb der aktuellen Funktion existieren:

#include 
#include 

int main( int argc, char* argv[])
{
    int foo(int x);

    /*     
    int bar(int x) {  // das geht nicht
        return x;
    }
    */

    int a = 3;

    printf( "%d\n", foo(a));

    return 0;
}

int foo( int x) 
{
    return x+1;
}

Ein Funktionsdeklaration ohne expliziten 'Linkage-Spezifizierer' hat eine extern Verknüpfung. Daher ist die Deklaration des Namens foo in der Funktion main() zwar auf main() beschränkt, aber sie wird auf die foo()-Funktion verweisen, die später in der Datei definiert ist (oder in einer anderen Datei, wenn foo() dort definiert ist).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X