Ich habe gehört, dass es eine gute Praxis ist, Funktionen zu schreiben, die nichts als Parameter wie folgt erhalten:
int func(void);
Aber ich höre, dass der richtige Weg, das auszudrücken, so ist:
int func();
Was ist der Unterschied zwischen diesen beiden Funktionsdeklarationen in C und C ++?
c++
programming-practices
c
Grizzly
quelle
quelle
Antworten:
C und C ++ unterscheiden sich in dieser Hinsicht.
C 2011 Online Standard
Kurz gesagt, wird eine leere Parameterliste in einer Funktionsdeklaration zeigt an, dass die Funktion eine dauert unspezifiziert Anzahl der Parameter, während eine leere Parameterliste in einer Funktionsdefinition anzeigt , daß die Funktion übernimmt keine Parameter.
In Bezug auf C sollten Sie in einer Funktionsdeklaration oder -definition niemals eine leere Bezeichnerliste verwenden . Wenn eine Funktion keine Parameter annehmen soll, geben Sie dies
void
in der Parameterliste an.Online C ++ Standard
Im Fall von C ++ gibt eine leere Parameterliste in einer Deklaration oder Definition an, dass die Funktion keine Argumente akzeptiert, und entspricht der Verwendung einer Parameterliste von
void
.quelle
In C, eine Funktion mit einer leeren Parameterliste
()
kann nimmt etwas für ihre Argumente. Buchstäblich alles. Dies wird normalerweise verwendet, um eine Funktion zu implementieren, die eine variable Anzahl von Argumenten annehmen kann. Heutzutage wird jedoch die Verwendung der expliziteren Auslassungssyntax(...)
für diese Funktionen als vorzuziehen angesehen .In C nimmt eine Funktion mit der Parameterliste
(void)
explizit nichts für ihre Argumente. Das heißt, der Compiler kann Ihnen tatsächlich mitteilen, dass Sie einen Fehler gemacht haben, wenn Sie versuchen, etwas zu übergeben.In C ++ sind diese Funktionsdeklarationen äquivalent. Eine leere Parameterliste bedeutet "keine Parameter", wie dies auch der
void
Fall ist.quelle
()
für solche von variadischen Funktionen verwendet hat. Haben Sie ein Beispiel für ein Programm, das diese Konvention verwendet?...
Syntax definiert werden und mindestens einen benannten Parameter haben. Das Definieren einer solchen Funktion mit()
undefiniertem Verhalten führt dazu, dass der Hauptteil der Funktion die in definierten Makros nicht<stdarg.h>
zum Lesen der Parameterwerte verwenden kann. Dies ist seit dem Standard 1989/1990 der Fall....
, um undefiniertes Verhalten zu vermeiden.