in c: func(void) vs. func() [duplicate]

Lesezeit: 1 Minute

Benutzer-Avatar
noamtm

Wenn eine C-Funktion keine Argumente akzeptiert, muss sie dann von den Sprachregeln mit einem “void”-Parameter deklariert/definiert werden? PC-Lint scheint Probleme zu haben, wenn die Argumentliste überhaupt nichts enthält, und ich habe mich gefragt, ob es etwas in der Sprachsyntax ist, von dem ich nichts weiß.

Bearbeiten: Ich habe gerade eine doppelte (back-dupe? es kam zuerst) Frage gefunden, C void arguments, die mehr Antworten und Erklärungen enthält.

void bedeutet, dass die Funktion keine Parameter akzeptiert. Zum Beispiel,

int init (void)
{
    return 1;
}

Das ist nicht dasselbe wie definieren

int init ()
{
    return 1;
}

denn im zweiten Fall prüft der Compiler nicht, ob die Funktion wirklich ohne Argumente aufgerufen wird; Stattdessen wird ein Funktionsaufruf mit einer beliebigen Anzahl von Argumenten ohne Warnung akzeptiert (Dies ist nur für die Kompatibilität mit der alten Funktionsdefinitionssyntax, Pre-ANSI, implementiert).

Benutzer-Avatar
Timo Geusch

IIRC func(void) in C deklariert eine Funktion, die keine Parameter akzeptiert, während func() eine Funktion deklariert, die eine beliebige Anzahl von Parametern akzeptiert. Ich glaube, letzteres ist ein Artefakt aus der Zeit vor ANSI C.

Entsprechend Wikipedia hier deklariert die Deklaration func() grundsätzlich die Funktion “ohne Angabe der Parameter”.

  • Ist eine Funktion, die eine beliebige Anzahl von Parametern akzeptiert, nicht als func(…) definiert?

    – noamtm

    22. Juli 2009 um 8:44 Uhr

  • Sie glauben richtig, in K&R C waren Parameterlisten anders (und schlecht) definiert. Aber in C++ ist f() dasselbe wie f(void)

    – Henk Holtermann

    22. Juli 2009 um 8:49 Uhr

  • @noamtm – eine Funktion der Form func(a, b, …); deklariert eine C-Funktion, die eine variable Argumentliste übernimmt, also in gewissem Sinne auch eine beliebige Anzahl von Parametern annehmen würde.

    – Timo Geusch

    22. Juli 2009 um 8:55 Uhr

1216630cookie-checkin c: func(void) vs. func() [duplicate]

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

Privacy policy