2016-08-01 38 views
0

Ich möchte die in einer Funktion übergebenen Argumente drucken. Aber clang gibt Parameternamen zurück, die in der Funktionsdefinition verwendet werden. Hier ist mein Code:Clang gibt Parameternamen statt Argumente zurück

if (CallExpr *call = dyn_cast<CallExpr>(st)) 
{ 
    LangOptions LangOpts; 
    LangOpts.CPlusPlus = true; 
    PrintingPolicy Policy(LangOpts); 

    for(int i=0, j=call->getNumArgs(); i<j; i++) 
    { 
     std::string TypeS; 
     raw_string_ostream raw(TypeS); 
     call->getArg(i)->printPretty(raw, 0, Policy); 
     errs() << raw.str() << "\n"; 
    } 
} 

Bitte sagen Sie, was das Problem sein könnte.

Antwort

0

Wenn es um Argumente geht, gibt es viele Möglichkeiten. Aber ich nehme an, Sie mit dem einfachsten Fall handelt, wie:

int iArgument = 123; 
char cArgument = 'c'; 
foo(iArgument, cArgument); 

Mehrere Gussteile notwendig sind, um Argumente zu bekommen info

for (unsigned i = 0; i < call->getNumArgs(); ++i) { 
    if (auto cast = dyn_cast<ImplicitCastExpr>(call->getArg(i))) { 
     if (auto arg = dyn_cast<DeclRefExpr>(cast->getSubExpr())) { 
      arg->getNameInfo().getName().dump(); 
     } 
    } 
} 
+0

Sorry für die Verspätung zu antworten. Ich möchte iArgument und cArgument, d. H. Die Namen der Argumente, erhalten. Das ist alles. [This] (http://stackoverflow.com/questions/9607852/print-arguments-of-a-function-using-clang-ast) sagt 'printPretty()' zu verwenden. –

+0

Außerdem kann ich den Namen der Argumente erhalten, wenn ich einen einfachen C++ Code verwende. Aber wenn ich anfange, die API einer anderen Bibliothek zu benutzen (dafür spezifiziere ich die Datei compile_commands.json), stellt dies Probleme dar. –