2

我正在使用 clang 进行某种源到源的转换。我想做以下事情:

我在 C 中有一类函数,它们是va_arg函数,例如printf(). 源文件中可能有许多调用printf()。我想解析源代码并找到所有这些对printf(). 此外,我想找到传递给printf(). 所以,如果我有类似的东西

int a, b, c;
printf("%d%d%d", a, b, c);

我希望能够弄清楚对的特定调用printf是 type printf(char*, int, int, int)。我并不特别关心预选赛。

有人可以告诉我我应该如何在铿锵声中做到这一点吗?任何类似的例子都会受到欢迎。如果你能告诉我我应该看哪些课程,并简要告诉我应该遵循的流程,我将不胜感激。

4

1 回答 1

0

你应该写一个 ASTConsumer。首先要看的是examples/PrintFunctionNames中的代码,这是一个非常简单的ASTConsumer。

查找对 printf 的所有调用的一种方法是通过RecursiveASTVisitor查找CallExpr节点。这些节点有 getNumArgs() 和 getArg(n) 可以让您检查参数。您可以在这些表达式上调用 expr->getType() 来获取它们的类型。

于 2011-05-22T09:34:02.940 回答