ANSI-C: Verstehe eine define-Anweisung nicht

Gast #2591393
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
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
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
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
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
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
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 ?
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.