Konstante: 0x01 dasselbe wie 0x0001 ?



  • Hallo,

    macht folgender Code Sinn (Ansi C), den ich in einem Sourcecode gefunden habe:

    #define Byte1_ub (0x01)
    #define Byte1_uw (0x0001)
    

    _ub wird in der vorliegenden Software in Variablennamne/#defines als Info für unsigned byte (== unsigned char) und _uw für unsigned word verwendet.

    Erkennnt der Compiler nur anhand der Länge der Konstanten die Länge (Byte oder Word) der definierten Konstanten 😕
    Wie kann er dabei auf 'unsigned' erkennen? Etwa weil 0x immer 'unsigned' ist ?!

    Oder muss dass so geschrieben werden:

    #define Byte1_ub ((unsigned char)(0x01))
    #define Byte1_uw ((unsigned word) (0x01))
    

    Ist das von vom Compiler abhänig oder gibt es hierzu klare Regeln in C?

    Danke für jede Info!
    Sergeant



  • Im ersten Beispiel ergeben die beiden Werte ertmal Konstanten vom Typ int .

    Ich sehe auch erstmal keinen Sinn darin. Bei beiden Beispielen.

    Berechnungen werden als int durchgeführt, auch wenn die beteiligten Typen einen kleineren Wertebereich haben.

    Was wird mit den Makros denn im Code so angestellt?

    Wenn die Konstanten etwas anderes sein sollen als int, kann man noch ein Suffix anhängen.
    Weniger als int geht damit aber nicht.
    Schua mal bei: http://www.c-plusplus.net/forum/p2377695#2377695


Anmelden zum Antworten