我目前正在使用clang的python綁定編寫一個靜態C++代碼分析器,並且出於某種原因,我找不到任何東西是extern
或者不在AST中,但是有一個CursorKind似乎是apropriate(CXCursor_LinkageSpec)Clang AST:extern LinkageSpec問題
我的意思是,像extern int foo;
解析代碼時,我只能找到在AST我的變量foo
而不是其聯動規格的單線索。
我錯過了什麼?
問候
我目前正在使用clang的python綁定編寫一個靜態C++代碼分析器,並且出於某種原因,我找不到任何東西是extern
或者不在AST中,但是有一個CursorKind似乎是apropriate(CXCursor_LinkageSpec)Clang AST:extern LinkageSpec問題
我的意思是,像extern int foo;
解析代碼時,我只能找到在AST我的變量foo
而不是其聯動規格的單線索。
我錯過了什麼?
問候
類VarDecl有一個成員函數: 布爾hasExternalStorage()const的 它告訴你的變量是否是的extern與否。
我正在使用clang的C++庫。希望它能幫助你的Python工作。
位A necroanswer的,但如果你去到鐺\ LIB \塞瑪\ SemaCodeComplete.cpp(在\ LLVM \工具\如果按照LLVM的安裝說明),並添加以下行:
case Decl::LinkageSpec: return CXCursor_LinkageSpec;
在交換機:
CXCursorKind clang::getCursorKindForDecl(const Decl *D)
應該解決鐺的Python的粘結劑的返回而不是正確的LINKAGE_SPEC UNEXPOSED_DECL問題。此更改是在修訂版183352(2013-06-05)進行的。從我的版本
例子:
CXCursorKind clang::getCursorKindForDecl(const Decl *D) {
if (!D)
return CXCursor_UnexposedDecl;
switch (D->getKind()) {
case Decl::Enum: return CXCursor_EnumDecl;
case Decl::LinkageSpec: return CXCursor_LinkageSpec;
// ......
而對於功能(FunctionDecl)有[getStorageClass(https://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html#a6d1ca48abb2608409dcd2a9261d555bc),您可以檢查是否它等於SC_Extern('clang :: StorageClass :: SC_Extern') – sinelaw 2017-07-11 12:59:30