Anfängerfragen zu C und Funktionen



  • Hi ich habe da eine Verständlichkeitslücke, warum kann ich bei

    {
    	text1(); 
    	text2();
    	BildHalten();
    	return 0;
    }
    

    nicht in den Parametern void schreiben ?

    text1(void); 
    	text2(void);
    	BildHalten(void);
    	return 0;
    

    Wenn man nicht void o.ä reinschreibt was schreibt mann denn dort sonnst hinein ?

    ich würde auch noch gerne wissen warum ich das return 0; nicht am ende der letzten funktion schreiben kann, denn dort würde dann doch eh der letzte befehl ausgeführt

    {
    	printf("Eine Taste Druecken!");
    	getch();
    	return 0;
    }
    
    #include <conio.h>
    #include <stdio.h>
    
    void text1 (void);
    void text2 (void);
    void BildHalten(void);
    
    int main(void)
    {
    	text1();
    	text2();
    	BildHalten();
    	return 0;
    }
    void text1(void)
    {
    	printf("Hello World\n");
    }
    void text2(void)
    {
    	printf("Hier ist Jan Ackermann\n");
    }
    void BildHalten(void)
    {
    	printf("Eine Taste Druecken!");
    	getch();
    
    }
    


  • void vor dem Funktionsnamen heißt: kein Rückgabewert, also kein return mit Wert.
    void im Prototypen heißt: keine Parameter. Das ist ein Design-Fehler, wenn mich fragst. Es geht meistens auch ohne.



  • Wenn man nicht void o.ä reinschreibt was schreibt mann denn dort sonnst hinein ?

    Einfach nichts.



  • µngbd schrieb:

    void im Prototypen heißt: keine Parameter. Das ist ein Design-Fehler, wenn mich fragst. Es geht meistens auch ohne.

    "ohne" im Prototypen heißt aber "beliebige Parameter". Das ist ein gewaltiger Unterschied. Deshalb sollte eine Funktion, deren Definition keine Parameter hat, im Prototypen void verwenden.

    Zumindest ist das bis C89 so, ich weiss nicht ob das in C99 noch erlaubt ist.



  • "ohne" im Prototypen heißt aber "beliebige Parameter".

    Und eben da liegt der Design-Fehler. Besser wäre für den Fall gewesen:

    type_t function(...)
    


  • Irgendwie habe ich den Eindruck ich verstehe Dich falsch (in diesem Fall wird der OP es sicher erst recht). Oder Du verdrehst hier was 🙂

    Die Definition einer Funktion nimmt keine Parameter an. Dann sollte der Prototyp auch keine Parameter annehmen, und nicht beliebig viele. Und das drückt man in C durch void aus, nicht durch leere Klammern, und erst recht nicht durch eine Ellipse.

    Davon abgesehen braucht eine Ellipse mindestens einen benannten Parameter vorneweg.



  • LordJaxom schrieb:

    Irgendwie habe ich den Eindruck ich verstehe Dich falsch (in diesem Fall wird der OP es sicher erst recht). Oder Du verdrehst hier was 🙂

    Die Definition einer Funktion nimmt keine Parameter an. Dann sollte der Prototyp auch keine Parameter annehmen, und nicht beliebig viele. Und das drückt man in C durch void aus, nicht durch leere Klammern, und erst recht nicht durch eine Ellipse.

    Davon abgesehen braucht eine Ellipse mindestens einen benannten Parameter vorneweg.

    Naja eigtl meine ich das so; Warum ich in der "Ausführung" stehene haben Text1(); und nicht einfach Text; oder bspw Text1(void); und was könnte man statt ein leeres feld in dieser elipse einfügen sie muss ja für etwas da sein.

    Noch eine frage zum Datentyp, die nehmen wir gerade durch aber ich möchte nicht jedesmal wenn ich etwas deklariere in die datentyptabelle schauen was sind denn so die standart datentypen für ganz und dezimalzahlen?



  • Meine Frage war eigentlich an µngbd gerichtet 🙂

    Zu Deiner Frage: Ein Funktionsaufruf definiert sich nunmal durch Funktion( [Parameter] ) . Wenn die Funktion keine Parameter hat, lässt Du sie komplett weg. Nur Funktion; wäre ein Zeiger auf Funktion (bevor Du Dich damit näher beschäftigst, solltest Du allerdings erst die grundlegenden Sachen drauf haben). Und Funktion(void); ist schlicht ungültig, da void keinen Ausdruck repräsentiert.

    Wenn die Funktion einen Parameter, mehrere Parameter oder beliebig viele Parameter entgegennimmt, müssen in den Klammern mit Komma getrennt so viele Ausdrücke stehen, wie Parameter erwartet werden. Bei Ellipsen mindestens einer.



  • wenn ich das Programm ohne die elipsen ausführe, dann startet nur das Mainprogramm und die Funktionen werden nicht aufgerufen



  • a) Du hast im Ursprungspost garkeine Ellipsen (Achtung: "Ellipse" nennt man das "..." (und das ist kein Platzhalter, sondern wirklich drei Punkte hintereinander), nicht das Klammernpaar oder so)
    b) Wenn Du Dich nicht mehr auf den Ursprungspost beziehst, poste bitte den aktuellen Code



  • Irgendwie habe ich den Eindruck ich verstehe Dich falsch (in diesem Fall wird der OP es sicher erst recht). Oder Du verdrehst hier was 🙂

    O je, das stimmt. Ich wollte ein bisschen über den Standard schimpfen.


Log in to reply