gpt4 book ai didi

c - 哪个变量存储了 gcc 中 C GENERIC AST 的根节点?

转载 作者:太空宇宙 更新时间:2023-11-04 00:09:38 24 4
gpt4 key购买 nike

我正在尝试为 gcc 4.5 编写一个插件,它将在解析完成后对 AST(GENERIC 表示)执行一些分析。我的源语言是 C,插件也将用 C 编写。有几个帖子here解释了如何为 C++ 做这样的事情。 GENERIC 文档和之前的链接都指出变量 global_namespace 存储 C++ GENERIC AST 的根节点。哪个变量存储 C GENERIC AST 的根节点?

提前致谢!

最佳答案

C 显然没有 namespace 这样的东西,但是作用域 的概念确实存在。您可以通过 c-tree.h 中定义的函数 pop_scope() 访问您所在位置的 englobing 范围(这取决于您的插件被 GCC 调用的事件) .这将返回一个 tree,它由一个 block 组成。您可以访问此 block 的所有声明,即通过宏 BLOCK_VARS 在此范围内声明的符号(变量、函数等),它为您提供了一个 声明节点。

如果您需要访问函数体,请记住,您始终可以通过宏 DECL_SAVED_TREE(node) 从函数定义中访问它,node 是您的 FUNCTION_DECL 节点。仅当定义在同一个文件中并且已经构建时,这才有效,同样,这取决于您 Hook 插件的位置。

免责声明:这对 GCC 4.8 有效,接口(interface)会经常更改。从 GCC 4.9 开始,插件接口(interface)部分用 C++ 编写。

关于c - 哪个变量存储了 gcc 中 C GENERIC AST 的根节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6748832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com