C: Kein Argumentname in Funktion

#2607323
Lesenswert?

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
#2607349
Lesenswert?

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.
Persönliche Seite #2607490
Lesenswert?

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
}
#2607651
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren