1
Я разработал посетителя AST с использованием Clang libtooling, и я хотел бы выделить прототипы функций и объявления функций. Мой посетитель 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;
}
функционировали> hasBody() не может различать между этими двумя вещами. Есть идеи??
Что заставляет вас думать, что это две разные вещи? Можете привести несколько примеров? Или вы имеете в виду объявления функций и определения функций? –
Да, я хотел различать определения функций и декларации. –
Тогда, пожалуйста, обновите вопрос. –