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.

Für C

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 1

Erklärung:

void f();

Definition:

void f(int a, int b, float c)
{
   //...
}
Fall 2

Erklä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?

Zusätzliche Frage:

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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage