Verschachtelte Funktion in C

Lesezeit: 4 Minuten

Benutzeravatar von Sachin Chourasiya
Sachin Chourasiya

Können wir eine verschachtelte Funktion in C haben? Wozu dienen verschachtelte Funktionen? Wenn sie in C existieren, unterscheidet sich ihre Implementierung von Compiler zu Compiler?

  • Scheint ein Duplikat von zu sein: stackoverflow.com/questions/1348095/…

    – zoli2k

    9. April 2010 um 14:21 Uhr

  • auch stackoverflow.com/questions/666586/… und stackoverflow.com/questions/2256647/… und stackoverflow.com/questions/957592/… und andere von stackoverflow.com/search?q=nested+functions+[c]

    – dmckee — Ex-Moderator-Kätzchen

    9. April 2010 um 14:56 Uhr

Sie können in Standard-C keine Funktion innerhalb einer anderen Funktion definieren.

Du kannst erklären eine Funktion innerhalb einer Funktion, aber es ist keine verschachtelte Funktion.

gcc hat eine Spracherweiterung, die verschachtelte Funktionen ermöglicht. Sie sind nicht standardisiert und daher vollständig vom Compiler abhängig.

Benutzeravatar von Marcelo Cantos
Marcelo Cantos

Nein, die gibt es in C nicht.

Sie werden in Sprachen wie Pascal aus (mindestens) zwei Gründen verwendet:

  1. Sie ermöglichen eine funktionale Dekomposition, ohne Namensräume zu verschmutzen. Sie können eine einzelne öffentlich sichtbare Funktion definieren, die eine komplexe Logik implementiert, indem Sie sich auf eine oder mehrere verschachtelte Funktionen verlassen, um das Problem in kleinere, logische Teile zu zerlegen.
  2. Sie vereinfachen in einigen Fällen die Parameterübergabe. Eine verschachtelte Funktion hat Zugriff auf alle Parameter und einige oder alle Variablen im Gültigkeitsbereich der äußeren Funktion, sodass die äußere Funktion nicht explizit einen Haufen lokaler Zustände an die verschachtelte Funktion übergeben muss.

Verschachtelte Funktionen sind kein Teil von ANSI-Cjedoch, Sie sind ein Teil von Gnu C.

  • Welche Bedeutung hat es, wenn sie Teil von Gnu C sind

    – Sachin Chourasiya

    9. April 2010 um 14:21 Uhr


  • @Sachin Hilft zu erkennen, warum der C-Code mit verschachtelten Funktionen mit gcc kompiliert werden kann. Die Informationen haben pädagogischen Wert. Darüber hinaus wird in der Frage nicht angegeben, ob sie nur auf C89, C99 oder GNU C beschränkt ist

    – zoli2k

    9. April 2010 um 14:35 Uhr

  • Andere Sprachen, die von GCC unterstützt werden, haben sie (ADA und Pascal, die ich kenne), daher ist es wahrscheinlich, dass es entweder einfach zur C-Implementierung hinzugefügt wurde oder dass es zu C hinzugefügt wurde, um sich auf die Unterstützung von Sprachen vorzubereiten, die verlangen sie.

    – Nategans

    9. April 2010 um 14:41 Uhr

  • MATLAB hat auch verschachtelte Funktionen.

    – Mike Tronix

    20. Dezember 2016 um 14:54 Uhr

Nein, Sie können keine verschachtelte Funktion haben C. Am nächsten kommen Sie, wenn Sie eine Funktion innerhalb der Definition einer anderen Funktion deklarieren. Die Definition dieser Funktion muss jedoch außerhalb jedes anderen Funktionskörpers erscheinen.

Z.B

void f(void)
{
    // Declare a function called g
    void g(void);

    // Call g
    g();
}

// Definition of g
void g(void)
{
}

Ich erwähne dies, da viele Leute, die in C programmieren, jetzt C ++ – Compiler (wie Visual C ++ und Keil uVision) verwenden, damit Sie dies möglicherweise nutzen können …

Obwohl dies in C noch nicht erlaubt ist, können Sie, wenn Sie C++ verwenden, den gleichen Effekt mit den in C++11 eingeführten Lambda-Funktionen erzielen:

void f()
{
    auto g = [] () { /* Some functionality */ }

    g();
}

  • Die Frage bezog sich speziell auf C, nicht auf C++

    – Virgil

    25. Juni 2014 um 15:18 Uhr

  • @Virgile – Und die Frage lautete auch ausdrücklich “Sind verschachtelte Funktionen in jeder anderen Sprache erlaubt?”. Jons Antwort hat mir geholfen.

    – www-0av-Com

    8. April 2015 um 15:31 Uhr

Benutzeravatar von PauliL
PauliL

Wie andere geantwortet haben, unterstützt Standard-C keine verschachtelten Funktionen.

Verschachtelte Funktionen werden in einigen Sprachen verwendet, um mehrere Funktionen und Variablen in einen Container (die äußere Funktion) einzuschließen, sodass die einzelnen Funktionen (mit Ausnahme der äußeren Funktion) und Variablen von außen nicht sichtbar sind.

Im C, können Sie dies tun, indem Sie solche Funktionen in eine separate Quelldatei einfügen. Definieren Sie die Hauptfunktion als global und alle anderen Funktionen und Variablen als statisch. Jetzt ist nur noch die Hauptfunktion außerhalb dieses Moduls sichtbar.

  • Die Frage bezog sich speziell auf C, nicht auf C++

    – Virgil

    25. Juni 2014 um 15:18 Uhr

  • @Virgile – Und die Frage lautete auch ausdrücklich “Sind verschachtelte Funktionen in jeder anderen Sprache erlaubt?”. Jons Antwort hat mir geholfen.

    – www-0av-Com

    8. April 2015 um 15:31 Uhr

Um Ihre zweite Frage zu beantworten, gibt es Sprachen, die es ermöglichen, verschachtelte Funktionen zu definieren (eine Liste finden Sie hier: verschachtelte-funktionen-sprachliste-wikipedia).

In JavaScript, das eine der bekanntesten dieser Sprachen ist, kann es sich um verschachtelte Funktionen (die als Closures bezeichnet werden) handeln:

  • Erstellen von Klassenmethoden in Konstruktoren von Objekten.
  • Um die Funktionalität von privaten Klassenmitgliedern zusammen mit Settern und Gettern zu erreichen.
  • Um den globalen Namensraum nicht zu verschmutzen (das gilt natürlich für jede Sprache).

um ein paar zu nennen…

1421780cookie-checkVerschachtelte Funktion in C

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy