Aus RN-Wissen.de
Wechseln zu: Navigation, Suche


"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.