Den Unterschied zwischen f () und f (void) in C und C ++ ein für alle Mal verstehen
Ok, also ich habe unterschiedliche Meinungen zu diesem Thema gehört und möchte nur sicherstellen, dass ich es richtig verstehe.
Für C ++Erklärungenvoid f();
undvoid f(void);
meine genau das selbe, die funktionf
nimmt keine Parameter an. Das Gleiche gilt für Definitionen.
Erklärungvoid f(void);
bedeutet, dassf
nimmt keine Parameter an.
Erklärungvoid f();
bedeutet diese Funktionf
kann Parameter haben oder nicht, und wenn ja, wissen wir nicht, welche Art von Parametern dies sind oder wie viele es davon gibt. Beachten Sie, dass dies NICHT mit den Auslassungspunkten identisch ist, die wir nicht verwenden könnenva_list
.
Jetzt wird es hier interessant.
Fall 1Erklärung:
void f();
Definition:
void f(int a, int b, float c)
{
//...
}
Fall 2Erklärung:
void f();
Definition:
void f()
{
//...
}
Frage:Was passiert beim Kompilieren in den Fällen 1 und 2, wenn wir aufrufen?f
mit den richtigen Argumenten, falschen Argumenten und überhaupt keinen Argumenten? Was passiert zur Laufzeit?
Wenn ich erkläref
mit Argumenten, aber definieren Sie es ohne sie, wird es einen Unterschied machen? Sollte ich in der Lage sein, die Argumente aus dem Funktionskörper anzusprechen?