【问题标题】:Convert string to a name identifer将字符串转换为名称标识符
【发布时间】:2015-04-02 06:20:17
【问题描述】:

C89 中是否可以像 stringification 那样“去字符串化”?

【问题讨论】:

  • 您是在问一般性问题(在这种情况下,答案可能是否定的)还是试图通过去字符串化来完成特定任务?
  • 我正在尝试访问以字符串命名的变量。变量名可以与字符串进行比较,在这种情况下可以通过指针访问其值。问题是如何连接这些东西。
  • 类似于声明 void* **list 和宏 #define declare(type, name, init) type name = init; {//3dallocation, *list[num] = #name &list[num] = name;} ...
  • 所以它真的更像是一个符号查找。为什么要通过字符串来完成?字符串是用户提供的吗?
  • 是的。作为用户输入。用户在控制台中输入变量的名称,控制台输出其值。这怎么没用……尤其是对于开发库。

标签: c string stringify


【解决方案1】:

变量名在编译时被翻译成符号名。这些符号应该不能从程序内部访问,并且它们的名称经常被弄乱,但无论如何,C 没有提供从内部访问他自己的运行时的方法。编程语言中的这种功能称为“反射”,如果您在项目中依赖它的存在,您应该查找具有它的语言,或者,正如我所建议的,使用某种 2D 地图或字典,是数据结构,其中每个对象都与一个唯一的键(通常是一个字符串)相关联,从而可以轻松地以您似乎需要的方式查找它。

【讨论】:

    【解决方案2】:

    我认为您的意思是要扩展为 hello 的宏 DESTRINGIFY("hello")。在这种情况下,不,在 C89 以及以后的标准中是不可能的。

    【讨论】:

    • 井名标识符必须作为字符串存储在内存中的某处。我认为 DESTRINGIFY 是可能的方式或其他方式..
    • @AlanSalios:不,它们通常不存储在内存中,只有具有外部链接的标识符。
    • 啊是的..我忘了。
    猜你喜欢
    • 2023-03-23
    • 2016-02-06
    • 2015-07-26
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多