【发布时间】:2022-01-03 07:32:19
【问题描述】:
我想组装一个 char 数组,其中包含一个带有编译时间常数值的字节和一个字符串,该字符串也是编译时间常数。解决方案是:
char packet[] = "\42" __DATE__;
这可行,但可读性和可维护性不强,因为 0x42 是在其他地方使用的消息操作码,这使它成为一个神奇的数字。现在,我可以将一个虚拟 x 放入字符串中,然后按照这个定义进行如下赋值:
#define OPCODE 0x42
char packet[] = "x" __DATE__;
packet[0] = OPCODE;
但我觉得可以用纯常量字符串文字来完成,我只是找不到如何去做。有什么想法吗?
【问题讨论】:
-
请注意,
#define OPCODE 42是 十进制 42(八进制52,十六进制2a,ascii"),而字符串转义"\42"是 八进制 42(十进制34,十六进制22,ascii*),所以问题本身是不一致的。 -
好的,谢谢,我将
42更改为0x42。这应该使它保持一致。
标签: c string c99 avr-gcc compile-time-constant