2016-07-10 7 views
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を()これら二つのものを区別することはできません。何か案は??

+0

あなたはそれらが2つの異なるものだと思いますか?いくつか例を挙げることができますか?あるいは、関数宣言と関数定義を意味しますか? –

+0

私は関数の定義と宣言を区別することを意味しました。 –

+1

それから質問を更新してください。 –

答えて

1

FunctionDecl::isThisDeclarationADefinition()を使用してください。

関連する問題