相对于C预处理器“字符串化”

当使用C预处理器可以stringify宏参数像这样:

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

因此当使用时,结果如下:

TO_STRING(测试)将扩展为:“一个带测试的字符串”

有什么办法做相反的事情吗?获取一个字符串文字作为输入参数并产生一个C标识符?例如:

TO_IDENTIFIER(“some_identifier”)将扩展为:some_identifier

谢谢你的答案。

编辑:对于那些想知道我需要什么:

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

#define __CRC32ID_something 0x09DA31FB

然后,生成的头文件将由每个cpp文件使用ID(x)宏包含。 ID(“something”)当然会扩展为__CRC32ID_something,所以实际上编译器会看到的是简单的整数标识符,而不是人类友好的字符串。当然,现在我会简单地解决ID(东西),但我认为使用引号将更有意义 – 一个程序员谁不知道ID宏的工作原理可以认为没有引号的东西是一个C标识符,当在现实中标识符根本不存在。

不,你不能unstringify的东西。
http://stackoverflow.com/questions/6982179/opposite-of-c-preprocessor-stringification

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:相对于C预处理器“字符串化”