我发现这个微距功能,可以让我在C.创建二进制文字为什么宏整型文字不能用于整型变量?
微距功能:
#define HEX__(n) 0x##n##LU
#define B8__(x) ((x&0x0000000FLU)?1:0) \
+((x&0x000000F0LU)?2:0) \
+((x&0x00000F00LU)?4:0) \
+((x&0x0000F000LU)?8:0) \
+((x&0x000F0000LU)?16:0) \
+((x&0x00F00000LU)?32:0) \
+((x&0x0F000000LU)?64:0) \
+((x&0xF0000000LU)?128:0)
#define B8(d) ((unsigned char)B8__(HEX__(d)))
#define B16(dmsb,dlsb) (((unsigned short)B8(dmsb)<<8) + B8(dlsb))
#define B32(dmsb,db2,db3,dlsb) \
(((unsigned long)B8(dmsb)<<24) \
+ ((unsigned long)B8(db2)<<16) \
+ ((unsigned long)B8(db3)<<8) \
+ B8(dlsb))
它工作正常,但是当我试图将一个int变量的宏功能,它给我一个后缀错误。
int i=10001000;
B8(i); //invalid suffix 'xiLU' on integer constant
B8(10001000); //no error
任何想法? (也请注意,我在TI TM4C LaunchPad上用C编码,如果有的话)
细节:在C中,'10001000'是一个_integer常量_。 C指定了2个_literals_:_string文字_和_compound文字_。 '10001000'也不是他们的 – chux
代码初始化'i'为'10001000'的值。你期望下一行'B8(i);'做什么? – chux
@chux它会产生与最后一行相似的结果。我假设我不能通过我得到的回应来做到这一点。 –