Wieso void statt int?

Dieses Thema im Forum "Webmaster Hilfe / Programmierer Forum" wurde erstellt von GConscience, 23.06.2012.

  1. #1 GConscience, 23.06.2012
    GConscience

    GConscience Neuer Benutzer

    Dabei seit:
    19.06.2012
    Beiträge:
    12
    Zustimmungen:
    0
    Ich lerne gerade die C-Programmiersprache und bin aktuell bei Funktionen, habe folgendes Programm:

    Code:
    #include<stdio.h>
    
    
    
    void helloWorld()
    {
        printf("\nHello, world.\n");
    }
    
    int main()
    {
        
        
    helloWorld();
    	
    	
    	
    getch();
    return 0;
    
    
    }
    Was hat es mit dem void auf sich?

    Wieso kann ich statt void auch einfach int machen aber trotzdem steht in der Beispielaufgabe void?

    Und wieso kann ich zb statt int main() auch void main() machen?

    Was mich außerdem noch interessieren würde:
    Ich mache immer int main(), mein Professor aber int main(int argc, char *argv), warum?
     
  2. AdMan

    schau mal hier: Windows-Wartungs-Tool. Viele Probleme lassen sich damit einfach beheben. Oftmals ist der PC dann auch schneller!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  3. #2 xandros, 23.06.2012
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.885
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Void -> Funktion liefert keinen Wert zurueck
    Int -> Funktion liefert einen Integer zurueck

    Bei der Main-Funktion macht es keinen Sinn, diese mit INT zu deklarieren wenn sie nicht von einer anderen Funktion aufgerufen wird und von der aufrufenden Funktion eine Rueckgabe erwartet wird. Allerdings ist es in so ziemlich allen C/C++ Buechern Standard, hier int zu verwenden.....
    int argc -> counter fuer die Anzahl der uebergebenen Commandline-Parameter
    char *argv -> Startparameterwert, der auf der Commandline angehaengt wurde.
    Mit beiden Werten koennen so beim Programmstart bereits Parameter fuer die Verarbeitung innerhalb des Programmes uebergeben werden.
     
  4. #3 GConscience, 23.06.2012
    GConscience

    GConscience Neuer Benutzer

    Dabei seit:
    19.06.2012
    Beiträge:
    12
    Zustimmungen:
    0
    Wie ist das gemeint mit einem Wert zurückliefern? Ich bekomme doch die Hallo Welt Ausgabe auf der Konsole obwohl ich void mache?
     
  5. deen

    deen Benutzer

    Dabei seit:
    25.10.2009
    Beiträge:
    55
    Zustimmungen:
    0
    Das printf wird aufgerufen, deshalb erscheint die Ausgabe auf der Konsole.

    Das hat nichts mit Rückgabe zu tun. Das Programm läuft prozedural ab. Main ist der Eintrittspunkt vom Programm. Dort wird eben alles was drin steht Schritt für Schritt abgearbeitet.
    In deine helloWorld()-Methode wird gesprungen, printf wird aufgerufen, Methode wird verlassen und es wird in der Main-Methode weitergegangen, bis eben nichts mehr kommt.

    Man kann sich ja vorstellen, dass es einige Dinge gibt, die man vielleicht oft wiederholen muss. Um das benötigte Codestück nicht immer wieder schreiben bzw. copy/pasten zu müssen, kann man es in eine Methode auslagern und eben dann diese Methode aufrufen, sobald man die Funktionalität benötigt.
    Das hat natürlich den Vorteil, dass du nur innerhalb dieser Methode den Code ändern musst, falls irgendwas an der Funktionalität geändert werden soll und sich das Programm übersichtlicher strukturieren lässt.

    Code:
    #include<stdio.h>
    
    int add(int a, int b) {
    // Ersatz für irgendeine tolle Berechnung
        return a + b;
    }
    
    void main() {
    
        int zahl1 = 5;
        int zahl2 = 6;
    
        int ergebnis = add(zahl1, zahl2);
    
        printf("Ergebnis: %d", ergebnis);
    }
    
    Das ist ein Beispiel für den Einsatz von Rückgabewerten. (An sich kann man sowas auch lösen, indem man nen Zeiger als Parameter nimmt, in welchen das Ergebnis gespeichert werden soll und den Rückgabewert für Sachen benutzt wie einen Indikator, der anzeigt ob die Funktion richtig abgearbeitet wurde o.ä.)

    Ich würde mir ein Buch für den Einstieg in die C Programmierung kaufen/ausleihen oder ein paar Tutorials anschauen, um die Basics zu lernen.
     
  6. #5 xandros, 23.06.2012
    Zuletzt bearbeitet: 23.06.2012
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.885
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Schoen, dass du dir zu dieser Aussage mit deinem Beispielcode selbst widersprichst......

    Ganz nebenbei:
    Void ist somit an sich (fuer die Funktion Main) nicht zulaessig, jedoch wird dies von nicht standardkonformen Compilern auch nicht bemaengelt oder durch kuriose Ergebnisse quittiert.
     
  7. deen

    deen Benutzer

    Dabei seit:
    25.10.2009
    Beiträge:
    55
    Zustimmungen:
    0
    Wieso widerspreche ich mir mit dem Codebeispiel?
    Ich schrieb doch unter das Beispiel, dass das ein Beispiel für eine Rückgabe ist?

    Das mit dem "Das hat nichts mit Rückgabe zu tun." war doch auf die helloWorld()-Methode bezogen, bei welcher beim Themenstarter die Frage aufkam wieso printf aufgerufen wird, obwohl er keinen Rückgabewert angibt.
     
  8. #7 xandros, 23.06.2012
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.885
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    OK! Kommentar streichen. Das wurde aus deinem Post nicht deutlich....
     
  9. #8 GConscience, 25.06.2012
    GConscience

    GConscience Neuer Benutzer

    Dabei seit:
    19.06.2012
    Beiträge:
    12
    Zustimmungen:
    0
    Okay alles klar, und nochmal eine andere Frage, was hat es mit einem * vor einer Variablen zu auf sich? Ich komm grad überhaupt nicht klar mit einer Prüfungsaufgabe:
    Code:
    int function(int a, int b, int *c, int *d)
    {
    *c = a;
    a = b;
    c = d;
    b = 17;
    *c = a;
    }
    
    int main()
    {
    int a=3, b=5, c=7, d=9;
    function(a, b, &c, &d);
    printf("%d %d %d %d", a, b, c, d);
    return 0;
    }
     
  10. AdMan

    Es ist generell erstmal empfehlenswert alle ggf. veralteten oder fehlerhaften Treiber zu scannen und auf neue zu aktualisieren. Hier kannst du einen Treiber-Scanner downloaden. Das erspart oftmals viel Ärger und hilft gegen diverse Probleme.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  11. deen

    deen Benutzer

    Dabei seit:
    25.10.2009
    Beiträge:
    55
    Zustimmungen:
    0
    Das sind Zeiger (Pointer). In die Funktion werden die Adressen als Parameter mit dem Adressoperator (&) übergeben. In dem Zusammenhang wäre es auch noch wichtig sich den Unterschied zwischen Call-by-Value und Call-by-Reference klar zu machen.

    Ich würd wirklich wie schon gesagt mal ein Buch oder ein Tutorial dazu anschauen. Da lernt man sicher mehr als durch kurze Forenbeiträge.

    Call-by-reference: Galileo Computing :: C von A bis Z &ndash; 12.6 Zeiger als Funktionsparameter (call&ndash;by&ndash;reference)

    Zeiger-Erklärung: C-Programmierung: Zeiger
     
  12. #10 GConscience, 26.06.2012
    GConscience

    GConscience Neuer Benutzer

    Dabei seit:
    19.06.2012
    Beiträge:
    12
    Zustimmungen:
    0
    Ich lerne mit C-Howto.de und mit unserem Skript, nur manche Dinge stehen nicht wirklich drin, weswegen ich auch hier nochmal genauer Nachfrage. Ich habe mir ausversehen eine Übungsaufgabe rausgesucht die schon im Stoff weiter war als ich, weswegen da auch die Zeiger vorkamen, dachte nur es wäre eine besondere Variable oder sonstiges von dem ich noch nichts gehört hab bzw hören werde :) vielen lieben Dank
     
Thema: Wieso void statt int?
Besucher kamen mit folgenden Suchen
  1. statt int

    ,
  2. was ist nochmal int main (void)

    ,
  3. cabal pointer in c

    ,
  4. call to function without prototype printf,
  5. int main(void)
Die Seite wird geladen...

Wieso void statt int? - Ähnliche Themen

  1. Aufrunden einer int in C

    Aufrunden einer int in C: Hi Leute, wie kann ich in C eine Zahl wie 53 auf die nächst größere Zahl welche durch 10 Teilbar ist aufrunden? Also von 53 auf 60 oder von 44...
  2. Versatel statt Primacom???

    Versatel statt Primacom???: Habe gerade einen Speedtest auf Wie ist meine IP-Adresse? gemacht. Naja, da ich bei Primacom bin, mir nach den Test meine Details anschaute,...
  3. HD funzt extern, aber nicht intern

    HD funzt extern, aber nicht intern: Hi allerseits, ich habe ein seltsames Problem: Meine inzwischen 4 verschiedenen Festplatten (SATA-3 HDD) funktionieren alle über eine...
  4. Logitech G502 geht nicht, wieso?

    Logitech G502 geht nicht, wieso?: Hallo, ich habe mir gerade die Logitech G502 gekauft. Habe sie am PC angeschlossen, doch bewege ich die Maus, bewegt sich der Mauszeiger nicht,...
  5. Cardreader: LogiLink USB 3.0, intern, gute Wahl ?

    Cardreader: LogiLink USB 3.0, intern, gute Wahl ?: Hallo, Ich benötige einen Kartenleser. Ich möchte keine (weiteren) Kabel auf / am PC "rumhängen" haben (externe Kartenleser). Wäre...