gpt4 book ai didi

c - C 预处理器的对面 "stringification"

转载 作者:太空狗 更新时间:2023-10-29 16:20:39 24 4
gpt4 key购买 nike

当使用 C 预处理器时,可以像这样对宏参数进行字符串化:

#define TO_STRING(x) "a string with " #x

等使用时,结果如下:

TO_STRING(test) 将扩展为:"a string with test"

有没有办法反其道而行之?获取字符串文字作为输入参数并生成 C 标识符?例如:

TO_IDENTIFIER("some_identifier") 将扩展为:some_identifier

感谢您的回答。

编辑:对于那些想知道我需要它做什么的人:

我想通过字符串标识符来引用我的 3D 引擎场景图中的节点,但同时避免在紧密循环中比较字符串。所以我想我会编写一个简单的工具,它将在编译的预构建步骤中运行并搜索预定义的字符串 - 例如 ID("something")。然后对于每个这样的标记,它将计算括号之间字符串的 CRC32,并生成一个头文件,其中包含这些数字标识符的#defines。例如对于字符串 "something" 它将是:

#define __CRC32ID_something 0x09DA31FB

然后,生成的头文件将包含在每个 cpp 文件中,使用 ID(x) 宏。 ID("something") 当然会扩展为 __CRC32ID_something,因此实际上编译器看到的是简单的整数标识符,而不是人类友好的字符串。当然,现在我将简单地满足于 ID(something) 但我认为使用引号会更有意义 - 一个不知道 ID 宏如何工作的程序员可以认为不带引号的 something 是 C 标识符,而实际上这样的标识符根本不存在。

最佳答案

不,你不能取消字符串化。

关于c - C 预处理器的对面 "stringification",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6982179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com