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

use*_*818 8 clang clang-static-analyzer llvm-clang

在我的一个检查器中,我使用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;

    };
Run Code Online (Sandbox Code Playgroud)

}

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

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

小智 8

实际上,clang有一个类来存储decls的名字(不仅仅是a FunctionDecl),叫做DeclarationNameInfo(声明为StatementNameInfo的clang api)

您可以使用API​​调用获取DeclarationNameInfo实例FunctionDecl:

functionDecl->getNameInfo();
Run Code Online (Sandbox Code Playgroud)

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

functionDecl->getNameInfo().getAsString();
Run Code Online (Sandbox Code Playgroud)

返回的结果将是a std::string.

有关在FunctionDecl的clang api中FunctionDecl可用的API的更多信息.

  • 还有`functionDecl-&gt;getNameAsString()`和`functionDecl-&gt;getQualifiedNameAsString()` (2认同)