反正有没有使用 clang libtooling 切换功能?

Is there anyway to switch the functions using clang libtooling?

已编辑:

我和我的同事对 clang 和 llvm 还很陌生。

我有三个函数..

function 1{}
function 2{}
function 3{}

有没有办法把函数换成

function 3{}
function 2{}
function 1{}

使用 clang libtooling / rewriter 并打印出函数名称以及函数内的参数?

您可以先使用 ASTConsumer 解析 AST。您一次获得一个函数的 AST,您可能希望将其全局存储在某处,然后您可以将它们添加到 clang 的 REWRITTER API 中,最后将缓冲区转储回文件。

This 是编辑一些 AST 节点并写回文件的示例。在您的情况下,您不会编辑 AST,而只是重新安排缓冲区推送调用以重新安排功能。 在 VisitFunctionDecl 中:

bool VisitFunctionDecl(FunctionDecl *f) {
    // Only function definitions (with bodies), not declarations.
    if (f->hasBody()) {
         //store in a global array/vector
    }

    return true;
}

在 main 中,在 ParseAST 之后和写入文件之前,你将做一个 rearrangeFunctionDecls。