11 Stimmen

Standardargumente und variadische Funktionen

Gibt es eine Möglichkeit, einen Standardparameter in einer variablen Funktion anzugeben (gilt auch für Vorlagen)?

9voto

Cheers and hth. - Alf Punkte 138555

In C++ können Sie die variadische Funktion durch eine auf dem Named Parameter Idiom basierende Funktion ersetzen.

Siehe den C++ FAQ-Eintrag 10.20 Was ist das "Named Parameter Idiom"? .

Dadurch erhalten Sie Standardfunktionen und eine praktische Notation.

Prost & hth.,

3voto

Alexander Rafferty Punkte 6030

Warum sollten Sie sowohl variadische als auch Standardparameter benötigen?

Zum Beispiel,

myFunc(int a=5, int b=5, int c=5);

kann 0-3 Parameter mit Standardwerten empfangen, und

myFunc(...)

kann eine beliebige Anzahl von Parametern enthalten. Innerhalb der Funktion können Sie auf fehlende Parameter prüfen und bei Bedarf die Standardwerte eingeben.

3voto

Jens Gustedt Punkte 74457

Zunächst eine C++-Antwort.

Ein Standardparameter ist ein Parameter, von dem Sie wissen, dass die Funktion ihn als gegeben ansehen soll und wird. Sie sollten diese Parameter also definitiv benennen und können dann Standardargumente bereitstellen. Dies wäre eine "kurze" Version Ihrer Funktion.

Wenn Sie zusätzlich zu diesen Standardargumenten noch die Möglichkeit haben wollen, eine va_arg Argumentliste überladen Sie Ihre Funktion einfach mit einer zweiten Version, die genau dies tut. Für diese "lange" Version müssen Sie ohnehin alle Argumente angeben, es wäre also sinnlos, hier Standardargumente zu haben.

Jetzt eine C-Antwort

Wahrscheinlich haben Sie sich nicht mit so etwas beschäftigt, aber mit der va_arg Makro Eigenschaften von C99 ist es möglich, zu definieren Standardargumente für Funktionen in C auch. Die Makrosyntax ist insofern freizügiger als in C++, als Sie Argumente auch in der Mitte eines Funktionsaufrufs auslassen können, nicht nur am Ende. Wenn Sie also Ihre Funktion wie folgt deklariert hätten

int toto(int a, ...)

und Standardargumente für die Positionen 2 und 3 angegeben haben, könnten Sie es z. B. wie folgt aufrufen

toto(4,5,,,37);

In diesem Sinne ist es in C also möglich, das zu tun, worum Sie gebeten haben. Ich persönlich würde sicherlich zögern, dies zu tun.

2voto

Prasoon Saurav Punkte 88056

Nein, das ist nicht möglich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X