Standardfunktionsargumente müssen in die Funktionsdeklaration gehen, die der Aufrufstandort sieht.
int sum (int, int, int = 10);
Sie sind an dem Ausdruck erforderlich, an dem die Funktion aufgerufen wird. Der Implementierung sollte es egal sein, ob sie als Standard übergeben wird oder nicht.
Darüber hinaus können Sie die Funktion in einem kleineren Bereich neu deklarieren und völlig andere Standardargumente angeben. Diese Code-Schnipsel aus dem 17 Standard-Entwurf ++ c genommen und zeigen, was ich meine:
void f(int, int);
void f(int, int = 7);
void h() {
f(3); // OK, calls f(3, 7)
void f(int = 1, int); // error: does not use default
// from surrounding scope
}
void m() {
void f(int, int); // has no defaults
f(4); // error: wrong number of arguments
void f(int, int = 5); // OK
f(4); // OK, calls f(4, 5);
void f(int, int = 5); // error: cannot redefine, even to
// same value
}
void n() {
f(6); // OK, calls f(6, 7)
}
Theoretisch (tut dies in der Praxis nicht tun), können Sie auch unterschiedliche Header haben, die die gleiche Funktion mit einem deklarieren verschiedene Standard-Parameterwert. Und es wird wie erwartet funktionieren, solange sie nicht beide in der gleichen Übersetzungseinheit enthalten sind.
Setzen Sie das Standardargument in die Kopfzeile. – drescherjm