当使用 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 标识符,而实际上这样的标识符根本不存在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)