Sto usando clang biblioteca 3.0 per alcune analisi di codice C/C++, e ho bisogno di ottenere la posizione di dichiarazione di variabile, ho provato questo codice:Come per ottenere la posizione del nome variabile nel clangore :: VarDecl
clang::VarDecl * vd = ...;
clang::SourceManager & srcMgr = ...;
clang::SourceRange loc = vd->getSourceRange();
clang::PresumedLoc locStart = srcMgr.getPresumedLoc(loc.getBegin());
clang::PresumedLoc locEnd = srcMgr.getPresumedLoc(loc.getEnd());
Ma locStart e locEnd punta all'inizio (e finale) di variabile (dichiarazione con tipo, ed eventualmente initialiser). Ad esempio:
const char * ptr = 0;
^ ^^ ^
locStart punterà al primo puntatore (^
), e locEnd punterà all'ultimo puntatore. Come posso ottenere la posizione del secondo e del terzo puntatore (solo nome, senza tipo e inizializzatore)?
Siamo spiacenti, ma 'getQualifierLoc()' non aiuta. Questa funzione restituisce 'NestedNameSpecifierLoc', e nel mio caso restituisce un oggetto vuoto (senza alcuna informazione). – Alexey
Sì, hai ragione: questo è in realtà per la posizione di cose come 'const' o' volatile'. Ho provato con un programma di esempio e sembra che sia semplice come usare 'getLocation()': mentre il 'VarDecl' stesso vuole iniziare con il tipo, il' SourceLocation' restituito da 'getLocation()' sembra identificare il nome. –
Grazie, mi aiuta davvero, non so, perché ho iniziato a usare 'getSourceRange',' getLocation' funziona per me! – Alexey