(Weitere Fallstricke:) |
(→Weitere Fallstricke:) |
||
Zeile 11: | Zeile 11: | ||
== Weitere Fallstricke: == | == Weitere Fallstricke: == | ||
+ | |||
+ | Die implizite Typenumwandlung kann zu unerwarteten Ergebnissen führen: | ||
+ | z.B. liefert abs(1.4) nicht etwa 1.4 sondern 1 als Ergebnis, denn die Funktion abs() ist in C für Integertypen definiert. Für Floatingpoint gibt es die Funktion fabs(). | ||
+ | |||
+ | In C wird zur Laufzeit nicht auf Überläufe getestet, weder bei Arrayzugriffen noch bei Rechenoperationen. |
Aktuelle Version vom 2. November 2007, 23:18 Uhr
"TRUE ist nicht 1"
In dem Abschnitt steht, dass man lieber folgendes schreiben soll.
#define FALSE (0!=0) #define TRUE (0==0)
Was soll das bringen? Danach ist FALSE 0 und und TRUE als 1 definiert, da laut ANSI-C (ANSI99 6.5.9) Each of the operators ["==" und "!="] yields 1 if the specified relation is true and 0 if it is false.'. Siehe auch http://www.dclc-faq.de/kap8.htm#8.2 . Meine Meinung verwirrt die Aussage TRUE ist nicht 1 nur.--Plaicy 22:43, 3. Jun 2007 (CEST)
- Es gibt mehr als einen C-Standard. Manchmal ist es günstiger, TRUE als -1 zu definieren. Die Makros oben sind jedoch unabhängig davon, welcher Wert ein Compiler implementiert --SprinterSB 23:36, 5. Jun 2007 (CEST)
- Nur aus Interesse: Welcher Compiler unterstüzt nicht C89, wo dies auch schon galt? Außerdem schließe ich mich der Meinung von http://www.dclc-faq.de/kap8.htm#8.2 an, dass Vergleiche auf auf TRUE grundsätzlich ungünstig sind. Wenn man unbedingt auf eine Konstante abfragen will, was eigentlich auch mit dem "!"-Operator übersichtlicher ist, kann man noch != FALSE verwenden.--Plaicy 17:08, 12. Jun 2007 (CEST)
Weitere Fallstricke:
Die implizite Typenumwandlung kann zu unerwarteten Ergebnissen führen: z.B. liefert abs(1.4) nicht etwa 1.4 sondern 1 als Ergebnis, denn die Funktion abs() ist in C für Integertypen definiert. Für Floatingpoint gibt es die Funktion fabs().
In C wird zur Laufzeit nicht auf Überläufe getestet, weder bei Arrayzugriffen noch bei Rechenoperationen.