Kann eine C-Funktion mehrere Signaturen haben? [duplicate]

Lesezeit: 2 Minuten

Benutzer-Avatar
RLH

Mögliches Duplikat:

Funktionsüberladung in C

Entschuldigung, wenn dies ein Dup ist, aber wenn ja, kann ich es nicht finden.

Können Sie in C mehrere Funktionen mit demselben Funktionsnamen, aber mit unterschiedlichen Parametern definieren? Ich komme aus einem C#-Hintergrund. In C# ist der folgende Code völlig legal.

//Unsere erste Funktion

int MyFunction()
{
    //Code here
    return i;
}

int MyFunction(int passAParameter)
{
    // Code using passAParameter
    return i;
}

In meinem speziellen Fall möchte ich eine Funktion erstellen, die einen optionalen Parameter (das ist ein Int) am Ende der Parameterliste hat. Ist das möglich?

  • Nein, das Überladen von sir-Funktionen ist in C nicht erlaubt, aber in C++ ist es erlaubt.

    – Khaled Alshaya

    30. September 2011 um 18:44 Uhr

  • Das nennt man Funktionsüberladung. Schauen Sie hier: stackoverflow.com/questions/479207/function-overloading-in-c

    – Matjaz Muhic

    30. September 2011 um 18:44 Uhr

  • Während die ähnliche Frage im Link einige Hinweise auf eine Art Überladung enthalten könnte, sollten Sie sich wahrscheinlich davon fernhalten. Im Gegensatz zu C# ist das Überladen in C nicht idiomatisch und es ist durchaus akzeptabel, zwei Funktionen zu erstellen MyFunction und MyFunctionWithParameter

    – Umarmung

    30. September 2011 um 18:53 Uhr

  • Da dies geschlossen ist, kann ich Ihnen keine “Antwort” geben, sondern muss dies in einem Kommentar hinterlassen. Der Sonderfall optionaler Parameter ist mit Makrotricks möglich. Schau mal in P99, p99.gforge.inria.fr

    – Jens Gustedt

    30. September 2011 um 19:47 Uhr

Nr. C unterstützt kein Überladen.

  • Während C im Allgemeinen keine Überladung hat, kann der Sonderfall, dass OP nämlich nach Standardargumenten fragt, mit Makros auf bequeme Weise erledigt werden.

    – Jens Gustedt

    30. September 2011 um 19:49 Uhr


  • Wenn Sie sehen möchten, wie es in C++ unterstützt wird, verwenden Sie die nm tool auf Unix-ähnlichen Betriebssystemen und Sie werden sehen, dass die in ELF in C++ eingebauten Symbole verstümmelt werden und ihre Typinformationen dem Symbolnamen hinzugefügt werden. Wenn du extern "C" Um die gleichen Symbole herum und bauen Sie es erneut und schauen Sie, Sie werden bemerkt haben, dass die Namen nicht verstümmelt sind, um die Argumenttypen einzuschließen.

    – zjm555

    9. September 2014 um 17:27 Uhr

Nein. In striktem C geht das nicht Überlastung.

Da die meisten C-Compiler jedoch auch C++ unterstützen und C++ das Überladen unterstützt, besteht eine gute Chance, dass Sie überladen können, wenn Sie einen gängigen C/C++-Compiler verwenden.

Aber es ist nicht streng standardisiert oder in reine C-Umgebungen portierbar.

Nein, Sie müssen für jede Funktion einen anderen Namen verwenden (dies gilt nicht für C++, da Sie optionale Parameter angeben können).

1353420cookie-checkKann eine C-Funktion mehrere Signaturen haben? [duplicate]

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

Privacy policy