Wegen malloc, ich habe gelesen das diese funktion einen pointer vom typ Void zurueckgibt und daswegen mache ich den cast zu float.
Ja, tut sie. Aber Pointer vom Typ void werden in C automatisch auch ohne Cast in Pointer auf andere (Daten-)Typen umgewandelt. So wie diverse Zahlentypen auch ohne Cast ineinander umgewandelt werden.
Der Cast ist kein Fehler an sich, er koennte aber den Fall verstecken, dass man eben malloc verwendet, ohne <stdlib.h> inkludiert zu haben. Dann ist es ein Cast von int auf einen Pointertyp, und der koennte theoretisch schiefgehen, wenn ints und Pointer unterschiedlich gross sind.
Generell habe ich eine Abneigung gegenueber unnoetigen Casts. Schlimm sind die "ich-ignoriere-den-Rueckgabewert-dieser-Funktion"-Casts; dass der Wert ignoriert wird, sieht man auch so. An die Spitze getrieben habe ich mal Code von einem respektablen Mitglied dieses Forums gesehen, der Statements dieser Form enthalten hat:
Das ist weder "defensives Programmieren" noch selbstdokumentierender Code, das ist nur noch programmiertechnischer Dadaismus aus Gewohnheit, und als solcher kein guter Programmierstil.
Jeder Cast sollte was aussagen, und dieser sagt aus "ich weiss nicht, was free zurueckgibt, es ist mir auch egal, ob es einen Fehler zurueckgeben koennte (!), und ich machs halt so, weil mir eingetrichtert wurde, dass mans halt immer so macht". Aehnlich ist mein Eindruck, wenn ich Code lese, der malloc castet -- "aha, anderer Pointertyp, ich caste mal, weil ich das Typsystem meiner Sprache nicht so gut kenne, wie ich sollte". Ich respektiere da natuerlich die gut begruendete entgegengesetzte Meinung, aber das ist wie gesagt mein Eindruck, wenn ich den nackten Code sehe. Hab mir gedacht, ich erwaehns mal, eigene Meinung bilden kann man sich dann auch noch 
Zitat
Ich habe mir auch die sysprog Folien angeschaut, daswegen mache ich auch gerade C :P. Da steht der cast auch mit drin.
Mit Verlaub, die Sysprog-Menschen sind nicht die kompetentesten C-Programmierer der Welt. Aber mir ist auch klar, dass man das als Anfaenger nicht so einschaetzen kann 
Ich begruende diese Aussage wohl besser anhand von zwei nicht repraesentativen Beispielen. In einer Sysprog-Abgabe hatte ich Code, der mit Eventcountern irgendwas gemacht hat, ich erinner mich an die Funktionsnamen nicht mehr, aber der Code hatte die Form
eventcounter c;
for (c = anfang(); c != der_event_auf_den_ich_warte(); c = naechster_event())
{
...
}
Die Tutorin wollte das nicht akzeptieren, hat ewig nicht geglaubt, dass man mit einer for-Schleife was anderes machen kann als Sachen zaehlen.
Und noch viel schlimmer, bei einem der Tests kam die Frage "was ist das Ergebnis von diesem Programm", wobei im Code sowas gestanden ist:
Ich hab waehrend dem Test den einen Assi hergerufen und ihm gesagt, dass das nicht C ist, er darauf "dochdoch, Arrays und Pointer sind das selbe in C". Stimmt nicht, sie sind aehnlich, haben aber bestimmte gravierende Unterschiede, unter anderem, dass man obiges nicht machen kann. Gut, das ist ja schlimm genug, und ich habs auch am Pruefungsbogen verzeichnet. Und was machen die dann? Statt ihren Fehler zuzugeben, wird nach dem Test eine Mail ausgesendet mit einer Aussage der Art "viele Studenten hatten bei einem Beispiel Verstaendnisprobleme", und wer nichts einigermassen plausibles hingeschrieben hat, kann zu einem zehnminuetigen Nachtest ueber ein aehnliches Beispiel antreten.
So, Frust von der Seele geredet 
Zitat
Danke fuer die weitere Erklaerung von -O2. Wundert mich aber schon das bei einer uninitialized variable der normale compiler ohne die O2 option net meckert.
Wie gesagt, es ist dafuer eine Analyse noetig, die fuer Optimierungen wichtig ist, ansonsten nicht. Die ist jetzt nicht wirklich aufwendig, aber wenn man den Compiler nicht um Optimierung bittet, moechte er trotzdem so schnell wie moeglich laufen und keine unnoetigen Analysen durchfuehren.