www.mikrocontroller.net

Forum: PC-Programmierung C: Kein Argumentname in Funktion


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Daniel -------- (root)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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)

Autor: Rolf Magnus (rmagnus)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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
void x(char c) { c = c; }
hervor.

Autor: sebastian (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Rolf Magnus (rmagnus)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Daniel -------- (root)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
in C++ geht das. C habe ich jedoch ewig nicht programmiert
und Standard liegt auf der Arbeit

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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
void x(char c) { c = c; }
> hervor.

Gibt das kein "c is assigned a value but never used" oder so?

Klassisch ist
void x (char c)
{
    (void) c;
}

und mit GCC geht auch
void x (char c __attribute__((unused)))
{
}

Autor: Rolf Magnus (rmagnus)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net