Hallo, darf in C der Argumentname fehlen? Nicht ob Compiler das frisst, sondern Standard es erlaubt? so beispielweise void x(char); // einmal in Deklaration void x(char) {} // einmal in Definition C89? C99? Hab auf die schnelle keine Aussage dazu gefunden. Grüße, Daniel
Daniel -------- schrieb: > darf in C der Argumentname fehlen? > void x(char); // einmal in Deklaration ja > void x(char) {} // einmal in Definition nein (keine ahnung ob es irgendwo steht, anders macht es aber kaum sinn)
Peter II schrieb: > (keine ahnung ob es irgendwo steht, anders macht es aber kaum sinn) Naja, in C++ ist es auch bei der Definition erlaubt, keinen Namen anzugeben. Zumindest beim gcc ist das auch praktisch. Wenn ein vorgegebenes Interface eine bestimmte Parameterliste von der Funktion verlangt, der Parameter aber in der Funktion gar nicht benötigt wird, läßt man den Namen einfach weg und bekommt keine Warnung, daß man den Parameter nicht benutzt wird. Bei C muß man sich da immer irgendwas anderes ausdenken, um die Warnung zu unterdrücken. Das bringt dann so Stilbüten a la
1 | void x(char c) { c = c; } |
hervor.
> > void x(char) {} // einmal in Definition > nein doch. Du kannst das Argument dann nicht verwenden. Macht z.B. Sinn wenn die Signatur für einen Funktions-Zeiger passen muss.
sebastian schrieb: >> > void x(char) {} // einmal in Definition >> nein > doch. nein. > Du kannst das Argument dann nicht verwenden. Macht z.B. Sinn wenn > die Signatur für einen Funktions-Zeiger passen muss. Das ist nur in C++ erlaubt.
in C++ geht das. C habe ich jedoch ewig nicht programmiert und Standard liegt auf der Arbeit
Rolf Magnus schrieb: > Bei C muß man sich da immer irgendwas anderes ausdenken, > um die Warnung zu unterdrücken. Das bringt dann so Stilbüten a la
1 | void x(char c) { c = c; } |
> hervor.
Gibt das kein "c is assigned a value but never used" oder so?
Klassisch ist
1 | void x (char c) |
2 | {
|
3 | (void) c; |
4 | }
|
und mit GCC geht auch
1 | void x (char c __attribute__((unused))) |
2 | {
|
3 | }
|
Johann L. schrieb: > Gibt das kein "c is assigned a value but never used" oder so? Beim gcc zumindest nicht. Es ist ja auch "used", da es auf der rechten Seite einer Zuweisung steht. ;-) > Klassisch ist > void x (char c) > { > (void) c; > } Das geht auch und bringt auch keine Warnung bei gcc. Könnte aber auch sowas ausgeben wie "statement with no effect" oder so. Der Cast verhindert das wohl in diesem Fall. > und mit GCC geht auch > void x (char c __attribute__((unused))) > { > } Ja, das benutze ich auch öfters, meist hinter einem nicht ganz so häßlich aussehenden Makro, das dann auch in einem #ifdef GCC oder so steckt. Grundsätzlich finde ich aber, daß keine der drei Varianten wirklich elegant ist.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.