gpt4 book ai didi

c - 源到源操作

转载 作者:太空狗 更新时间:2023-10-29 15:27:30 24 4
gpt4 key购买 nike

我需要在 Linux 内核中进行一些源代码到源代码的操作。为此,我尝试使用 clang,但出现了问题。 Clang 对源代码进行预处理,即宏和包含扩展。这导致 clang 有时会根据 Linux 内核产生损坏的 C 代码。我无法手动维护所有更改,因为我希望每个文件有数千个更改。

我尝试了 ANTLR,但可用的公共(public)语法不完整,不适合 Linux 内核等项目。

所以我的问题如下。有没有什么方法可以在不对 C 代码进行预处理的情况下对其执行源到源操作?

所以假设下面的代码。

#define AAA 1
void f1(int a){
if(a == AAA)
printf("hello");
}

应用源到源操作后我想得到这个

#define AAA 1
void f1(int a){
if(functionCall(a == AAA))
printf("hello");
}

但是,例如,Clang 生成了以下不符合我要求的代码,即它扩展了宏 AAA

#define AAA 1
void f1(int a){
if(functionCall(a == 1))
printf("hello");
}

希望我说得足够清楚。

编辑

以上代码只是一个例子。我想做的源到源操作不仅限于 if() 语句替换,还可以在表达式前面插入一元运算符,用正值或负值替换算术表达式等。

解决方案

我为自己找到了一种解决方案。我使用 gcc 来生成预处理的源代码,然后应用 Clang。然后我对宏扩展和包含没有任何问题,因为这项工作是由 gcc 完成的。感谢您的回答!

最佳答案

你可以考虑http://coccinelle.lip6.fr/ : 它提供了一个很好的语义修补框架。

关于c - 源到源操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7060697/

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