Automatischer Rückgabetyp



  • C von A bis Z - 11.3 Definition von Funktionen schrieb:

    Rückgabetyp - Hier legen Sie den Datentyp des Rückgabewerts fest. Dabei dürfen alle bisher kennen gelernten Datentypen verwendet werden. Eine Funktion ohne Rückgabewert wird als void deklariert. Sollten Sie einmal keinen Rückgabetyp angeben, so wird automatisch eine Funktion mit Rückgabewert vom Datentyp int erzeugt.

    In C99 (auf den Standard, auf welchen sich der Autor bezieht) gibt es doch diesen automatische Rückgabetyp doch nicht mehr - oder?

    C von A bis Z - 11.3 Definition von Funktionen schrieb:

    Parameter - Die Parameter einer Funktion sind optional. Sie werden durch Datentyp und Namen spezifiziert und durch ein Komma getrennt. Wird kein Parameter verwendet, können sie zwischen die Klammern entweder void schreiben oder gar nichts.

    In C ist doch eine Funktion mit einer leeren Parameterliste eine funktion mit beliebig vielen Parametern - oder? In C++ dagegen ist ein Fkt. mit leerer Parameterliste eine Fkt. ohne Parameter - oder?



  • Vertexwahn schrieb:

    C von A bis Z - 11.3 Definition von Funktionen schrieb:

    Rückgabetyp - Hier legen Sie den Datentyp des Rückgabewerts fest. Dabei dürfen alle bisher kennen gelernten Datentypen verwendet werden. Eine Funktion ohne Rückgabewert wird als void deklariert. Sollten Sie einmal keinen Rückgabetyp angeben, so wird automatisch eine Funktion mit Rückgabewert vom Datentyp int erzeugt.

    In C99 (auf den Standard, auf welchen sich der Autor bezieht) gibt es doch diesen automatische Rückgabetyp doch nicht mehr - oder?

    doch, machst du nur boo(par1, par2, par3...) statt datentyp boo(par1, par2, par3...) wird boo als int interpetiert. Gcc liefert eine Warnung.

    Vertexwahn schrieb:

    In C ist doch eine Funktion mit einer leeren Parameterliste eine funktion mit beliebig vielen Parametern - oder? In C++ dagegen ist ein Fkt. mit leerer Parameterliste eine Fkt. ohne Parameter - oder?

    Dieser Code lässt sich ohne Warnungen und Compile-Fehler kompilieren

    void foo(){}
    
    void bar()
    {
            foo();
            foo(1,2,3,4,5,6);
    }
    

    allerdings würde ich sagen, dass das Verhalten diesbezüglich in C und C++ identsich ist. Ich weiß aber nicht, ob die va_* Makros in foo funktionieren, denn für gewöhnlich werden Ellipsen mit den 3 Punkten (bsp: void foo(int a, ...)) deklariert.



  • #include <stdio.h> 
    
    foo(void)
    {
    	static int counter = 6;
    
    	printf("%d\n", counter);
    
    }
    
    int main(void)
    {
    	foo();
    	printf("Hallo Welt!\n");
    
    }
    

    Comeau C/C++ 4.3.3 (Aug 6 2003 15:13:37) for ONLINE_EVALUATION_BETA1
    Copyright 1988-2003 Comeau Computing. All rights reserved.
    MODE:strict errors C99

    "ComeauTest.c", line 3: error: omission of explicit type is nonstandard ("int"
    assumed)
    foo(void)
    ^

    1 error detected in the compilation of "ComeauTest.c".



  • implizites int gibt es in C99 nicht mehr. Ein Typ darf also nicht mehr ausgelassen werden.

    und

    void foo(){}
    
    void bar()
    {
            foo();
            foo(1,2,3,4,5,6);
    }
    

    hat nichts mit impliziten int zu tun. hier werden nirgendwo typen ausgelassen.



  • Shade Of Mine schrieb:

    implizites int gibt es in C99 nicht mehr. Ein Typ darf also nicht mehr ausgelassen werden.

    und

    void foo(){}
    
    void bar()
    {
            foo();
            foo(1,2,3,4,5,6);
    }
    

    hat nichts mit impliziten int zu tun. hier werden nirgendwo typen ausgelassen.

    da wollte ich nur seine 2. Frage testen, und sehen ob foo(1,2,3,4,5,6); sich auch kompilieren lässt.



  • supertux schrieb:

    da wollte ich nur seine 2. Frage testen, und sehen ob foo(1,2,3,4,5,6); sich auch kompilieren lässt.

    oh, ist ja fies wenn jemand 2 fragen gleichzeitig stellt... hab die 2. einfach nicht gelesen 😞

    sorry



  • Shade Of Mine schrieb:

    supertux schrieb:

    da wollte ich nur seine 2. Frage testen, und sehen ob foo(1,2,3,4,5,6); sich auch kompilieren lässt.

    oh, ist ja fies wenn jemand 2 fragen gleichzeitig stellt... hab die 2. einfach nicht gelesen 😞

    sorry

    aber so viel Unrecht hattest du auch nicht, weil meine Antwort auf die erste Frage auch nicht ganz richtig war, da bin ich aber davon ausgegangen, dass der gcc 100% ANSI wäre.


Anmelden zum Antworten