首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clang重写:向无效程序添加结构定义

clang重写:向无效程序添加结构定义
EN

Stack Overflow用户
提问于 2016-07-04 13:59:54
回答 1查看 193关注 0票数 3

我需要重写一个C/C++代码体,以便在使用结构定义时自动注入它们。具体来说,我需要识别表单的功能体:

代码语言:javascript
复制
int func(struct STRUCT_x_y *args) { /* access args->field here */ }

..。并在函数的主体之前生成结构声明,例如:

代码语言:javascript
复制
struct STRUCT_x_y {
    int field;
};

int func(struct STRUCT_x_y *args) { /* access args->field here */ }

当尝试使用Clang的重写器插入结构声明(例如,跟随这个骨架程序)时,我会收到错误,因为没有这些声明,原始程序文本不会编译--函数尝试访问未定义结构上的字段。

是否有可能在一个无效的C++程序上使用Clang的重写器?我甚至可以设置一个进一步的限制--函数体无效,但是程序的其余部分都很好。

(当然,我可以利用一些丑陋的解决方案,使用正则表达式来检测函数签名并生成结构,但我更愿意利用Clang解析器和重写器的功能。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-28 06:27:15

我最后只做了两次通过程序。在第一遍中,我使用了一个null诊断器,这样所有的错误和警告都会被忽略。我收集了一些方法,它们的签名表明需要生成一个结构。在完成第一遍之后,我生成了所有的结构,并通过第二遍运行程序,这一次是使用诊断器。

一般来说,Clang的AST是不可变的,除了纯基于文本的重写之外,它不允许树的修改。但上述方法对我们来说相当有效。如果您对上下文感兴趣,这是IOVisor BCC项目的一部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38186546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档