Forum: Compiler & IDEs ist void foo() das gleiche wie void foo(void)?


von Adib (Gast)


Lesenswert?

Hallo Leute,

meine Frage gilt für "C" und im speziellen gcc.
Bei implizit definierten Funktionen geht doch der Compiler immer von 
einer int foo(int) Definition aus.
Wenn aber hier kein Argument angegeben ist, was tut ein streng nach 
Vorschrift arbeitender Compiler annehmen?

Ist also void foo() genau gleichzusetzen mit void foo(void)

Zur Zeit tut jedenfalls der Compiler nicht "meckern".

Danke,

der Adib.

von Karl H. (kbuchegg)


Lesenswert?

Adib schrieb:
> Hallo Leute,
>
> meine Frage gilt für "C" und im speziellen gcc.
> Bei implizit definierten Funktionen geht doch der Compiler immer von
> einer int foo(int) Definition aus.

nein.

Er versucht aus der Verwendung der Argumente die Datentypen der 
Argumente zu erraten. Der Return WErt wird als int angenommen, soweit 
liegst du richtig. Sieht aber die Verwendung so aus

   i = foo( 5.0 );

dann nimmt der Compiler an, dass foo 1 Argument hat, und das dieses vom 
Datentyp double ist.

> Wenn aber hier kein Argument angegeben ist, was tut ein streng nach
> Vorschrift arbeitender Compiler annehmen?

  int foo( void );

von Andreas B. (andreas_b77)


Lesenswert?

Deklarationen wie "void foo();" werden nur noch akzeptiert, um 
kompatibel mit uralten C-Programmen zu sein. Sowas sollte man nicht mehr 
verwenden.

von Rolf Magnus (Gast)


Lesenswert?

Adib schrieb:
> Hallo Leute,
>
> meine Frage gilt für "C" und im speziellen gcc.
> Bei implizit definierten Funktionen geht doch der Compiler immer von
> einer int foo(int) Definition aus.
> Wenn aber hier kein Argument angegeben ist, was tut ein streng nach
> Vorschrift arbeitender Compiler annehmen?

Argument oder Parameter? Du scheinst eher letzteres zu meinen. Das 
Argument ist das, was ich beim Aufruf übergebe, der Parameter ist das, 
was ich bei der Deklaration reinschreibe.

> Ist also void foo() genau gleichzusetzen mit void foo(void)

Nein. Das erste ist eine Funktion, die eine an dieser Stelle unbekannte 
Parameterliste hat, das zweite ist eine, die keine Parameter hat.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Adib schrieb:
> Ist also void foo() genau gleichzusetzen mit void foo(void)

Der Vollständigkeit halber noch: in C++ (welches den historischen
Ballast der "beliebigen" Parameterliste nicht kennt) sind beide
Formen in der Tat gleich.

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.