Mas*_*erM 38 c macros stringification c-preprocessor
使用C预处理器时,可以像这样将字符串化为字符串:
#define TO_STRING(x) "a string with " #x
Run Code Online (Sandbox Code Playgroud)
所以使用时,结果如下:
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标识符,而实际上这样的标识符不存在于所有.
| 归档时间: |
|
| 查看次数: |
7720 次 |
| 最近记录: |