Ich habe Konstanten wie folgt zu definieren:UL Suffix vs uint32_t werfen
#define MY_CONSTANT 0xBEEF
ich sicher sein will, dass mein Konstante 32 Bit betrachtet werden.
Ich habe können (uint32_t) verwenden werfen wie folgt aus:
#define MY_CONSTANT (uint32_t)0xBEEF
oder eine UL-Suffix wie folgt aus:
#define MY_CONSTANT 0xBEEFUL
Sind diese beiden Versionen völlig gleichwertig?
Ich würde sagen nein, wie UL entspricht unsigned long
und unsigned long
Länge kann von CPU abhängen.
Der C99-Standard stellt sicher, dass eine uint32_t
integer 32 Bit ist, aber ich glaube nicht, es wird sichergestellt, dass ein UL
Suffix das gleiche tut.
'UINT32_C (0xBEEF)'? – EOF
@EOF 'UINT32_C()' stellt sicher, dass der Typ _at mindestens_ 32 Bit ist, wie im Typ 'uint_least32_t' – chux
Wenn Sie einen Compiler mit einem 16-Bit' int' haben, wird Ihre Konstante erweitert, wenn sie nicht als vorzeichenlos markiert ist (oder eine implementierungsdefinierte Konvertierung wird stattfinden). Sie sollten ein "U" -Suffix verwenden. –