如何在clang中使用FunctionDecl * D获取函数名称

时间:2013-12-20 05:45:41

标签: clang llvm-clang clang-static-analyzer

在我的一个检查器中,我使用FunctionDecl类来获取函数声明。现在我想获得我输入checkASTDecl方法的函数的名称。我们知道在checkASTDecl()中我们得到类FunctionDecl的指针。所以,任何人都可以帮助我获取我输入checkASTDecl的函数名称。

以下是我编写的示例代码:

namespace {

    class FuncPrototypeChecker :  public Checker<check::ASTDecl<FunctioeDecl> > {
            mutable OwningPtr<BugType> TernaryOperatorBug;

            public:
            void checkASTDecl(const FunctionDecl *D,
                AnalysisManager &mgr, BugReporter &BR) const;

    };

}

void FuncPrototypeChecker::checkASTDecl(const FunctionDecl *D,
                                    AnalysisManager &mgr,
                                    BugReporter &BR) const {
/* Get the name of the function from FunctionDecl *D */
}

我想获取我输入方法FuncPrototypeChecker :: checkASTDecl()的函数的名称。请帮助我实现它的方式。 提前谢谢。

1 个答案:

答案 0 :(得分:7)

事实上,clang有一个类来存储decls的名字(不只是FunctionDecl),名为DeclarationNameInfo(见clang api for DeclarationNameInfo

您可以使用API​​调用获取DeclarationNameInfo的{​​{1}}个实例:

FunctionDecl

并通过以下方式将名称作为字符串获取:

functionDecl->getNameInfo();

返回的结果为functionDecl->getNameInfo().getAsString();

clang api for FunctionDecl中提供了有关std::string API的更多信息。