stdarg.h va_start <-- wieso warning ?
-
Hi !
Ich hab mich gerade mal mit funktionen mit n belibigen parametern beschäftigt...Hier mal ein funktionierendes beispiel:
#include <iostream> using namespace std; #include <stdarg.h> void varParams(int cnt, ... ) { va_list params; int intpar; va_start(params, cnt); for (int i=0; i<cnt; i++) { intpar = va_arg(params, int); cout << intpar << endl; } cout << "---" << endl; va_end(params); } int main() { varParams(2, 5, 2); return 0; }Mein Problem ist jetzt, wenn ich den parameter cnt in der funktion initialisiere,bekomme ich folgende warnung:
Warnung: Zweiter Parameter von »va_start« ist nicht letztgenanntes Argument [standardmäßig aktiviert]Beispiel:
#include <iostream> using namespace std; #include <stdarg.h> void varParams(int cnt, ... ) { va_list params; int intpar; int cnt2 = 2; va_start(params, cnt2); for (int i=0; i<cnt2; i++) { intpar = va_arg(params, int); cout << intpar << endl; } cout << "---" << endl; va_end(params); } int main() { varParams(2, 5, 2); return 0; }Meine frage ist:
a) was bedeutet dieses warning genau ?
b) wie kann ich es ausschalten / umgehen ?Mfg Benny
-
Lies nochmal die Doku zu dem va_start, dann sollte das klarer werden. Es kommt nämlich nicht auf den Wert des zweiten Parameters sondern auf seine Adresse an.
-
The parameter parmN is the identifier of the last fixed parameter in the variable parameter list in the function definition (the one just before the ', ...'). <--- Hmm... wie macht printf das ?
so : ???
void printf (const char * format, ...) { va_list args; va_start (args, format); while(*format != 0) { if(*format++=='%')[bla..] } va_end (args); }also ist nen beispiel was ich gefunden hab... das gleiche hatte ich quasie auch vor nur dachte ich ich müsste erst zählen wie viele parameter übergeben wurden...
Mfg Benny
-
ok, perfekt !
also ich hab vorher schon in die referenz geguckt, aber scheinbar zu schluderig...
Danke für die hilfe !!!