define-Wert abfragen in if
-
Hallo,
ich hab ein define definiert:
#define testdefine ((unsigned int 24))
wie kann ich dieses jetzt in einer C-Funktion auf Richtigkeit überprüfen?
if(testdefine != (unsigned int) 0x00000018)
das bringt mir immer einen compiler-fehler "expected a }"
Tim
-
Der #define ist schon syntaktisch falsch (bzw. erzeugt syntaktischen Müll) - korrekt sollte das lauten
#define testdefine ((unsigned int)24)
(oder kürzer -#define testdefine 24u
.
-
danke für den Hinweis - hab mich hier verschrieben...
Jetzt bekomm ich zwar keinen Fehler mehr, aber die IF-Abfrage ist immer noch gültig.
if(testdefine != (unsigned int) 0x00000018)
eigentlich sollte doch 0x0000 0018 == 24 sein, oder?
Tim
-
Schau dir doch mal im laufenden Programm an, was wirklich dort verglichen wird.
-
ja, 18_16 == 24_10
-
supertux schrieb:
ja, 18_16 == 24_10
Hexazahl mit Dezimalzahl --> aber 0x200 + 24 sollte doch auch funktionieren, weil intern eh alles umgewandelt wird???
Oder übersehe ich etwas anderes?
Tim
-
derTim schrieb:
supertux schrieb:
ja, 18_16 == 24_10
Hexazahl mit Dezimalzahl --> aber 0x200 + 24 sollte doch auch funktionieren, weil intern eh alles umgewandelt wird???
Klar funktioniert das - das Ergebnis ist 0x218==536. (intern rechnet C sowieso mit Binärzahlen)
-
CStoll schrieb:
derTim schrieb:
supertux schrieb:
ja, 18_16 == 24_10
Hexazahl mit Dezimalzahl --> aber 0x200 + 24 sollte doch auch funktionieren, weil intern eh alles umgewandelt wird???
Klar funktioniert das - das Ergebnis ist 0x218==536. (intern rechnet C sowieso mit Binärzahlen)
kannst du das noch mal für mich ausführlicher erklären? also die 18 am ende entsprechen der 24 aber die 0x218 versteh ich leider nicht
Tim
-
Wenn du 0x200+24 addierst, was kommt da wohl heraus?
-
ja aber wo kommen die 0x200 her???
if(testdefine != ((unsigned int) 24))
testdefine = 0x18
Tim
-
ok jetzt hab ich`s kapiert... die 0x200 waren nur ein Bsp:
im prinzip möchte ich nur wissen, warum die if-Anweisung gültig ist:
#define testdefine ((unsigned int) 24)
if(testdefine != ((unsigned int) 24))
Tim
-
bzw. warum ist diese Aussage wahr
if(24 != 24)
Tim
-
diese Aussage ist nicht wahr.
-
wenn ich das so schreibe, wird bei mir die If-Anweisung immer ausgeführt und nicht die else-anweisung...
also ist da irgendwas faul???
und bei
if(testdefine != ((unsigned int) 24))
sollte auch die else-Ausführung bearbeitet werden, oder???
Tim
-
zeig mal lieber deinen ganzen Code
-
supertux schrieb:
zeig mal lieber deinen ganzen Code
das ist der ganze Code.... mehr steht wirklich nicht drinnen...
#define testdefine ((unsigned int) 24) int main(void) { int i=0; if(testdefine != ((unsigned int) 24)) i++; else i=3; while(1); }
d.h. hier macht der Compiler irgendwas falsch - richtig?
Tim
-
und woran kannst du erkennen (ohne printf oder debugger), dass i++ ausgeführt wird?
-
indem ich breakpoints setze
Tim
-
also, bei mir liefert dieser Code
#include <stdio.h> #define testdefine ((unsigned int) 24) int main(void) { int i=0; if(testdefine != ((unsigned int) 24)) i++; else i=3; printf("i = %d\n", i); return 0; }
yanez@pselap08:~> gcc b.c -ob yanez@pselap08:~> ./b i = 3
das ist ja in Ordnung.
-
so würde ich das auch erwarten... naja mal eine mail an die entsprechende firma schicken...
Tim