1
Clangのlibtoolingを使用してAST訪問者を開発しました。関数プロトタイプと関数宣言を区別したいと思います。私のAST訪問者は、両方のケースを関数宣言として取ります。以下は、関数宣言を訪問するために私のコードを見ることができます:Clang AST訪問者の関数定義と関数宣言を区別する方法
bool VisitFunctionDecl(FunctionDecl *func)
{
if(astContext->getSourceManager().isInMainFile(func->getLocStart()) && func->hasBody()) //checks if the node is in the main (input) file.
{
FullSourceLoc FullLocation = astContext->getFullLoc(func->getLocStart());
string funcName = func->getNameInfo().getName().getAsString();
string funcType = func->getResultType().getAsString();
string srcFunc = filename + "_" + funcName;
REPORT << "Function Declaration [" << FullLocation.getSpellingLineNumber() << "," << FullLocation.getSpellingColumnNumber() << "]: " << funcName << " of type " << funcType << "\n";
if (append == 0 && numFunctions == 0)
APIs << srcFunc <<":";
else
APIs << "\n" << srcFunc <<":";
APIs <<funcType << ",";
numFunctions++;
}
return true;
}
func-> hasBodyを()これら二つのものを区別することはできません。何か案は??
あなたはそれらが2つの異なるものだと思いますか?いくつか例を挙げることができますか?あるいは、関数宣言と関数定義を意味しますか? –
私は関数の定義と宣言を区別することを意味しました。 –
それから質問を更新してください。 –