我正在尝试使宏在我的c程序中工作,以将0x
添加到十六进制文字,如下所示:
#define BUILD ABCD0000
#define CONCAT(m, n) m ## n
#define HEX(x) CONCAT(0x, x)
const uint32_t Id = HEX (BUILD);
我收到此编译器错误:整数常量后缀“ x”无效。谁能帮忙?
这不是您期望的答案,但是很抱歉,我必须:不要这样做!
为什么不呢?
HEX(x)
导致认为将x转换为十六进制,而它要求参数已经在十六进制中。 HEX(ABC00+10)
会将第一部分带为十六进制,但第二部分仍为十进制。为了使宏在表达式中表现良好,诀窍是将每次使用参数括在括号之间,但是使用串联是不可能的。 0x
:它出现在附近的许多代码中,编译器消息中,调试器中等...因此,请训练自己的眼睛,而不要尝试逃脱。 据说,在Godbolt上测试了几个编译器版本后,我无法重现您的错误。因此,如果您想继续:
x
要扩展?