Tôi đang sử dụng thư viện clang 3.0 để phân tích mã C/C++, và tôi cần lấy vị trí khai báo biến, tôi đã thử mã này:Cách lấy vị trí tên biến trong clang :: 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());
Nhưng locStart và locEnd trỏ đến đầu (và kết thúc) của biến khai báo (có loại và, có thể là người khởi tạo). Ví dụ:
const char * ptr = 0;
^ ^^ ^
locStart sẽ trỏ vào con trỏ đầu tiên (^
), và locEnd sẽ trỏ vào con trỏ ngoái. Làm thế nào tôi có thể có được vị trí của con trỏ thứ hai và thứ ba (chỉ tên, không có kiểu và khởi tạo)?
Xin lỗi, nhưng 'getQualifierLoc()' không có tác dụng. Hàm này trả về 'NestedNameSpecifierLoc' và đối với trường hợp của tôi, nó trả về đối tượng rỗng (không có bất kỳ thông tin nào). – Alexey
Có, bạn nói đúng: đây thực sự là vị trí của những thứ như 'const' hoặc' volatile'. Tôi đã thử nghiệm với một chương trình mẫu và có vẻ như nó đơn giản như sử dụng 'getLocation()': trong khi 'VarDecl' chính nó muốn bắt đầu với kiểu,' SourceLocation' được trả về bởi 'getLocation()' dường như xác định tên. –
Cảm ơn, nó thực sự giúp, tôi không biết, tại sao tôi bắt đầu sử dụng 'getSourceRange',' getLocation' làm việc cho tôi! – Alexey