Casten mit Carsten
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: C:Ausdrücke
Ich verstehe immer noch nicht, was so schädlich am Casten ist.
Was ist denn das Risiko?
Was ist denn das Risiko?
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: C:Ausdrücke
Dirty Oerti hat geschrieben:Ich verstehe immer noch nicht, was so schädlich am Casten ist.
Was ist denn das Risiko?
Code: Alles auswählen
struct Flugzeug
{
long AnzahlTragflaechen;
};
struct Auto
{
long AnzahlRaeder;
}
void info( struct Flugzeug * flugzeug )
{
printf( "Das Flugzeug hat %d Tragflaechen\n", flugzeug->AnzahlTragflaechen );
}
void flieg( struct Flugzeug * flugzeug );
int main(void)
{
struct Auto auto;
auto.AnzahlRaeder = 4;
info( (struct Flugzeug *) &auto );
flieg( (struct Flugzeug *) &auto );
}
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: C:Ausdrücke
Nunja...aber wenn der Programmierer sein Auto dermaßen vergewaltigt ist er eigntl selber Schuld.Wieviele Tragflächen hat das Auto und glaubst Du es wird fliegen?
Du bist also im Grunde genommen gegen Casten, weil man damit als Programmierer "Mist bauen" kann?
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Re: C:Ausdrücke
Man sollte casts natürlich sinnvoll einsetzen. Wenn man sich damit allerdings nicht gut auskennt, können sie leicht zu einer Fehlerquelle werden.Xin hat geschrieben:Dirty Oerti hat geschrieben:Ich verstehe immer noch nicht, was so schädlich am Casten ist.
Was ist denn das Risiko?Wieviele Tragflächen hat das Auto und glaubst Du es wird fliegen?Code: Alles auswählen
struct Flugzeug { long AnzahlTragflaechen; }; struct Auto { long AnzahlRaeder; } void info( struct Flugzeug * flugzeug ) { printf( "Das Flugzeug hat %d Tragflaechen\n", flugzeug->AnzahlTragflaechen ); } void flieg( struct Flugzeug * flugzeug ); int main(void) { struct Auto auto; auto.AnzahlRaeder = 4; info( (struct Flugzeug *) &auto ); flieg( (struct Flugzeug *) &auto ); }
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: C:Ausdrücke
Dirty Oerti hat geschrieben:Nunja...aber wenn der Programmierer sein Auto dermaßen vergewaltigt ist er eigntl selber Schuld.
Du bist also im Grunde genommen gegen Casten, weil man damit als Programmierer "Mist bauen" kann?
Ihr habt beide Recht. Man sollte Casts sinnvoll einsetzen und wer sein Programm dermaßen vergewaltigt, ist eigentlich selbst schuld. Ich programmiere seit 1986. Ich habe gelernt, wie man es richtig macht, aber ich habe auch gelernt, dass Menschen Fehler machen. Anfänger machen Fehler, weil das schon gehen wird, bessere Programmierer machen Fehler, weil sie unaufmerksam waren. Sehr gute Programmierer wissen, dass sie gelegentlich unaufmerksam sind und dann Fehler machen. Die Konsequenz ist, Fehlerursachen zu vermeiden. Casts müssen genauso verpöhnt sein, wie gotos. In C++ gibt es noch einen Grund für Gotos, und das ist aus mehreren Schleifen zu springen. Java benötigt Goto nicht mehr. Und genauso sollte alles versucht werden, um Casts überflüssig zu machen.Kerli hat geschrieben:Man sollte casts natürlich sinnvoll einsetzen. Wenn man sich damit allerdings nicht gut auskennt, können sie leicht zu einer Fehlerquelle werden.
Wer keinen Mist bauen kann, muss qualitativere Programme schreiben und der Verzicht auf Casts bedeutet nicht zwangsläufig ein Verzicht auf Fähigkeiten der Programmiersprache.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: C:Ausdrücke
Ich habe mal irgendwo gelesen, dass es bei floats zu heftigen Rundungsfehlern kommen kann. Deswegen sollte man solange Ganzzahltypen nutzen, bis man auf eine Rechnung kommt, wo die Möglichkeit besteht, dass aus dem ganzzahligen Wert eine Kommazahlen wird. Das Ergebnis der Rechnung sollte dann über einen Cast ausgegeben werden.
Ich kann es nicht bestätigen und ich kenne auch keine Alternativen.
Dass es bei floats zu Rundungsfehlern kommt, habe ich aber schon mehrmals gelesen.
Ich kann es nicht bestätigen und ich kenne auch keine Alternativen.
Dass es bei floats zu Rundungsfehlern kommt, habe ich aber schon mehrmals gelesen.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: C:Ausdrücke
Endlosschleife oder keine Endlosschleife?Metamorph hat geschrieben:Ich habe mal irgendwo gelesen, dass es bei floats zu heftigen Rundungsfehlern kommen kann.
Ich kann es nicht bestätigen und ich kenne auch keine Alternativen.
Code: Alles auswählen
#include "stdio.h"
float i = 0.0;
float j = -1.0;
int main( void )
{
while( i != j )
{
j = i;
i = i + 1.0;
}
printf( "i (%f) ist gleich j (%f)\n", i, j );
j = j + 1.0;
printf( "i (%f) ist gleich j (%f)\n", i, j );
return 0;
}
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: C:Ausdrücke
Code: Alles auswählen
i (16777216.000000) ist gleich j (16777216.000000)
i (16777216.000000) ist gleich j (16777216.000000)

Also ich würde so etwas nie als Schleifenbedingung nehmen. Wenn schon mit Gleitkommazahlen dann nicht mit 'gleich' oder 'ungleich', weil es eben immer durch die begrenzte Genauigkeit zu Rundungsfehler kommen wird.
( Und ich würde auch nicht 'i = i + 1.0;' schreiben sondern 'i += 1.0;'

"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at