Forum: PC-Programmierung C: Kein Argumentname in Funktion


von Daniel -. (root)


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

von Peter II (Gast)


Lesenswert?

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)

von Rolf M. (rmagnus)


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.

von sebastian (Gast)


Lesenswert?

> > 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.

von Rolf M. (rmagnus)


Lesenswert?

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.

von Daniel -. (root)


Lesenswert?

in C++ geht das. C habe ich jedoch ewig nicht programmiert
und Standard liegt auf der Arbeit

von Johann L. (gjlayde) Benutzerseite


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
}

von Rolf M. (rmagnus)


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.

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
Noch kein Account? Hier anmelden.