Variable Argumenten-Liste
-
Hallo,
ich möchte eine Funtion schreiben, in der ich nicht immer die gleiche Anzahl an Argumenten übergeben werde.
ähnlich wie bei printf:
int i = 10; char str[] = "HALLO"; char c = 'a'; printf("int: %d, str: %s, char: %c", i, str, c);
Wie geht das, bzw. geht das?
-
q150022 schrieb:
Wie geht das, bzw. geht das?
Ja, das geht (natürlich): http://www-info2.informatik.uni-wuerzburg.de/dclc-faq/kap7.html
-
Bin mir nicht sicher, aber ich meine gehört zu haben, variable Parameterlisten seien schlechter Stil.
-
variable Parameterlisten seien schlechter Stil
Dem kann ich nicht zustimmen. Ich finde es eine elegante Möglichkeit verschiedene Probleme zu lösen. Siehe printf. Ich nutze es sehr oft für Funktionen die eine Debug-Meldung ausgeben sollen z.B. DebugMsg( char *pStr, ... ). Wie würde man so etwas eleganter lösen?
-
Wenn man es missbraucht ist es natürlich schlechter Stil.
Aber ich habe hiervon eigentlich noch nie einen missbrauch gesehen...
-
ethereal schrieb:
Bin mir nicht sicher, aber ich meine gehört zu haben, variable Parameterlisten seien schlechter Stil.
Was soll daran schlechter Stil sein?
Ich finde variable Parameterlisten gerade bei eigenen formatierten Ausgaben ideal. Man stelle sich nur mal vor, dass man seinen String aus lauter strcat()s zusammenbauen muss.
-
Schönen Dank an Daniel E. und Rest.
Die Zauberwörter heissen va_arg, va_list, va_start und va_end
-
Shade Of Mine schrieb:
Wenn man es missbraucht ist es natürlich schlechter Stil.
hrhr, so nach dem Motto,. meine Funktionen sehen grundsätzlich so aus:
void foo (int dummy, ...);
lol
-
Ich finde variable Parameterlisten gerade bei eigenen formatierten Ausgaben ideal. Man stelle sich nur mal vor, dass man seinen String aus lauter strcat()s zusammenbauen muss.
Sind halt nicht sehr Typsicher. Man kann z.B. Problemlos schreiben:
int main(void) { const char * s = "Halli Hallo"; printf("Hallo ich bin %i", s); }
Wird kompiliert, aber beim Ausführen gibts eins auf den Deckel...
mfg
-
@mfg
Also ich hab nichts auf den Deckel bekommen beim Ausführen. Warum auch? Er gibt dir hald nicht den Text aus, sondern die Adresse des Texts.
-
und beim kompilieren gibts ne Warnung. beim gcc