首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中,如何静态地将固定字符串的长度与该字符串(BCPL-样式)的开头进行前缀?

在C中,如何静态地将固定字符串的长度与该字符串(BCPL-样式)的开头进行前缀?
EN

Stack Overflow用户
提问于 2022-07-14 14:34:57
回答 1查看 30关注 0票数 1

对于静态字段名,我希望一些C编译器魔术来静态地增加字段名的长度,这样它就不会在编译时存储"LABEL“,而是存储"\x05LABEL”。(像我这样古老的人可能还记得,BCPL就是这样存储字符串的。)

要实现这一点,我能想到的最好方法是一个极其丑陋(且冗长)的宏:

代码语言:javascript
复制
#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中实现这一点?

EN

回答 1

Stack Overflow用户

发布于 2022-07-14 14:53:36

海事组织你不能。您将得到字符串文本(最有可能的编译器将将代码优化为单个字符串文本)

任何其他形式都需要创建一个普通变量并复制只能在运行时完成的数据。

顺便说一下,这个宏只适用于字符串文本。您不能将char数组传递给它(它将无法工作)。因此,它的使用仅限于字符串文本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72982282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档