ist void foo() das gleiche wie void foo(void)?

Gast #2804876
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.
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 );
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.