C++ 11 N3337 Standardentwurf
Es gibt keinen Unterschied.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf
Anhang C "Kompatibilität" C.1.7 Paragraf 8: Deklaratoren sagt:
8.3.5 Änderung: In C++, eine Funktion mit einer leeren Parameterliste deklariert keine Argumente hat. In C bedeutet eine leere Parameterliste, dass die Anzahl und der Typ der Funktionsargumente unbekannt sind.
Beispiel:
int f();
// means int f(void) in C++
// int f(unknown) in C
Rationale: Dies ist eine fehlerhafte Funktionsaufrufe zu vermeiden (das heißt, Funktionsaufrufe mit der falschen Zahl oder die Art der Argumente ).
Auswirkung auf das ursprüngliche Feature: Wechseln Sie in die Semantik des definierten Features. Diese Funktion wurde als „obsolescent“ in C markiert
8.5.3 Funktionen sagt:
4. Der Parameter-Deklaration-Klausel, um die Argumente fest, die angegeben werden können, und deren Verarbeitung , wenn die Funktion aufgerufen wird. [...] Wenn die Parameter-Deklaration-Klausel leer ist, übernimmt die Funktion keine Argumente. Die Parameterliste (void) entspricht der leeren Parameterliste.
C99
Wie in 11 von C++ erwähnt, gibt int f()
nichts über die Argumente und ist obsolescent.
Es kann entweder zu Arbeitscode oder UB führen. https://stackoverflow.com/a/36292431/895245
Aber wenn C++ das "void" benötigt hätte, dann hätte es das "am meisten ärgerliche Parse" -Problem vermeiden können. –
Richtig, aber es gibt so viele andere beschissene Parser in C++, es gibt keinen wirklichen Grund, über irgendeinen von ihnen zu reden. – DrPizza
Auf einer letzten Frage hat @James Kanze einen interessanten Leckerbissen gepostet. Repost hier, um es zu vermeiden: die ersten Versionen von C erlaubten nicht, die Anzahl der Parameter anzugeben, die eine Funktion annehmen könnte, daher war 'void foo()' die einzige Syntax, um eine Funktion zu deklarieren. Als Signaturen eingeführt wurden, musste der C-Ausschuss die No-Parameter aus der alten Syntax disambiguieren und führte die "void foo (void)" - Syntax ein. C++ nahm es aus Gründen der Kompatibilität. –