ANSI-C: Verstehe eine define-Anweisung nicht

Gast #2591393
Lesenswert?

Hallo,

leider steig ich gerade bei define-Anweisungen aus.

Kann mir jemand sagen was folgendes bedeuten soll ?

 #define Zustand2 2U
 #define Zustand1 1U
 #define Zustand0 0U

Im weiteren Programmverlauf werden diese defines einer unsigned 
charakter Variablen übergeben.

Sowas hab ich noch nie gesehen.

Danke für eure Hilfe
Gast #2591409
Lesenswert?

Hi

Das Define Zustand0 wird mit dem Wert 0 ersetzt. usw.

Ich vermute du verstehst das U nicht.
Es giebt an, das die Zahl keine negativen Wert benützt (unsigned).
Dies ist für den Compiler wichtig.

Google doch suffix

Gruss
#2591411
Lesenswert?

Huizlipochtli schrieb:
> Hallo,

> Kann mir jemand sagen was folgendes bedeuten soll ?
>  #define Zustand2 2U


guckstu bei define und C-Präprozessor:

http://de.wikipedia.org/wiki/C-Pr%C3%A4prozessor


defines sind lediglich Text-Ersetzungen der Form

#define <Ersetzungstext> <Ursprungstext>

#define PI 3.14159

#define STZM "ein supertolle, oberaffengeile rattenscharfe Zuckermaus"

Du kannst also in deinem C-Programm anstelle "Zustand2" überall den 
Kurz-Text "2U" verwenden. oder anstelle der Tipperei von 3.14... 
schreibst du PI. Oder in deinem Tagebuch, schreibst du STZM, und 
schickst den Text durch den Präprozessor. ;-)

Der Präprozessor macht dann daraus beim Übersetzen den Langtext
#2591422
Lesenswert?

Wegstaben Verbuchsler schrieb:
> Du kannst also in deinem C-Programm anstelle "Zustand2" überall den
> Kurz-Text "2U" verwenden.

autsch, antürlich genau andersrum. Du schreibst als "symbolischen Namen" 
"Zustand2" im Quelltext, und der "technische Wert" 2U (numerische Wert 2 
unsigned") wird dann nacher beim Präprozessieren eingesetzt, z.B. um 
eine Variable mit diesen Zahlenwert vorzubesetzen.
Gast #2591425
Lesenswert?

Ups, jetzt war ich wohl doch zu schnell.

Was hätte es denn kaputt gemacht wenn ich das U weglasse, denn 2 ist ja 
immer noch nicht -2 und unsigned kann ja keine negativen Zahlen.

die Frage ist also, warum das 2 überhaupt notwendig ist.

Hat das den Grund, daß die 2 hinter der define erst mal nur ein Text 
ist, und ich mit dem U gleich mit vereinbare wie er es behandeln soll ?

Aber Theoretisch könnte ich es doch weglassen. Würde das nicht über 
implizite Typumwandlung sowieso so wie oben beschreiben erfolgen ?
Gast #2591445
Lesenswert?

auch mal was gewußt :)

...gefällt mir :)


...und auch wenn also die signed-Konstante nur positiv wäre, wie z.B. 
die Zahl 2 würde das zu einem Fehler bei der Zuweisung zu einer unsigned 
Variable führen ?
Gast #2591451
Lesenswert?

Hallo,

genau das habe ich ja ein paar Posts vorher schon mal angeführt. 
Theoretisch würde doch ohne das U eine implizite Typumwandlung erfolgen. 
Und weil ich 2 (positiv) angeben würde und nicht -2 (negativ) ist die 
Angabe von U doch eigentlich nicht zwingend nötig.

Sehe ich das richtig ?
#2591531
Lesenswert?

auch mal was gewusst schrieb:
> Nein, da gibt es impliziete cast:

Casts sind per Definition immer explizit. Ein Cast ist das, was du 
hinschreibst, wenn du explizit eine Konvertierung hervorrufen willst.
Es gibt aber implizite Konvertierungen.

Huizlipochtli schrieb:
> Theoretisch würde doch ohne das U eine implizite Typumwandlung erfolgen.

Ja.

> Und weil ich 2 (positiv) angeben würde und nicht -2 (negativ) ist die
> Angabe von U doch eigentlich nicht zwingend nötig.

An dieser Stelle wäre sie das nicht unbedingt. Man kann aber bei einigen 
Compilern Warnungen einschalten oder ein lint-Tool benutzen, wo das auch 
eine Warnung hervorruft.
Es schadet ja nicht, im #define den Typ gleich richtig zu machen, statt 
auszunutzen, daß implizite Typwandlungen das ja eh korrigieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren