C中的反射支持

我知道它不被支持,但我想知道是否有任何技巧。 有小费吗?


一般来说,反思是程序分析某些代码结构的手段。 此分析用于更改代码的有效行为。

作为分析的反思通常非常薄弱; 通常它只能提供对函数和字段名称的访问。 这种弱点来自于语言实现者,他们基本上不希望在运行时使完整的源代码可用,以及适当的分析例程以从源代码中提取想要的东西。

另一种方法是通过使用强大的程序分析工具来处理程序分析,例如,可以按照编译器的方式精确地解析源文本。 (通常人们建议滥用编译器本身来做到这一点,但这通常不起作用;编译器机器想成为一个编译器,很难将其用于其他目的)。

需要的是一个工具:

  • 解析语言源文本
  • 构建代表程序每个细节的抽象语法树。 (如果AST保留源代码布局的注释和其他细节(例如列号,文字基数值等)
  • 构建符号表以显示每个标识符的范围和含义
  • 可以从函数中提取控制流
  • 可以从代码中提取数据流
  • 可以为系统构建一个调用图
  • 可以确定每个指针指向什么
  • 使用上述事实可以构建自定义分析器
  • 可以根据这种定制分析来转换代码(通常通过修改代表解析代码的AST)
  • 可以从修订后的AST中重新生成源文本(包括布局和注释)。
  • 使用这样的机制,可以在需要的任何详细级别上实现分析,然后转换代码以实现运行时反射将实现的效果。 有几个主要的好处:

  • 分析的细节级别或数量是一个雄心勃勃的问题(例如,它不受运行时反射只能做什么的限制)
  • 没有任何运行时间开销来实现反映的行为变化
  • 涉及的机制可以是通用的,并且可以跨多种语言应用,而不仅限于特定语言实现提供的内容。
  • 这与C / C ++的想法是一致的,你不用为不使用的东西付费。 如果你不需要反思,你不需要这个机器。 而你的语言并不需要内置弱思想的知识包袱。
  • 请参阅我们的DMS Software Reengineering Toolkit,了解可以为C,Java和COBOL完成所有上述操作的系统,其中大部分适用于C ++。


    围绕它的任何技巧? 有小费吗?

    编译器可能会有选择地生成'调试符号文件',调试器可以用它来帮助调试代码。 链接器也可以生成一个'映射文件'。

    技巧/提示可能是生成并读取这些文件。


    基于对如何将反射添加到C ++应用程序的响应? (堆栈溢出)和C ++被认为是C的“超集”的事实,我会说你运气不好。

    还有一个关于为什么C ++没有反射(Stack Overflow)的很好的答案。

    链接地址: http://www.djcxy.com/p/47637.html

    上一篇: Reflection support in C

    下一篇: End call in android programmatically