对于静态字段名,我希望一些C编译器魔术来静态地增加字段名的长度,这样它就不会在编译时存储"LABEL“,而是存储"\x05LABEL”。(像我这样古老的人可能还记得,BCPL就是这样存储字符串的。)
要实现这一点,我能想到的最好方法是一个极其丑陋(且冗长)的宏:
#define BCPL_STRING(STRING) \
(sizeof(STRING) == 1) ? "\x00" STRING : \
(sizeof(STRING) == 2) ? "\x01" STRING : \
(sizeof(STRING) == 3) ? "\x02" STRING : \
(sizeof(STRING) == 4) ? "\x03" STRING : \
(sizeof(STRING) == 5) ? "\x04" STRING : \
[etc]在编译时,是否有更好的方法在C中实现这一点?
发布于 2022-07-14 14:53:36
海事组织你不能。您将得到字符串文本(最有可能的编译器将将代码优化为单个字符串文本)
任何其他形式都需要创建一个普通变量并复制只能在运行时完成的数据。
顺便说一下,这个宏只适用于字符串文本。您不能将char数组传递给它(它将无法工作)。因此,它的使用仅限于字符串文本。
https://stackoverflow.com/questions/72982282
复制相似问题