2
我正在尝试使用libclang python绑定来解析我的C++源文件。我无法获得宏观的价值或扩大宏观。
这是我的示例C++代码展开宏并检索宏值
#define FOO 6001
#define EXPAND_MACR \
int \
foo = 61
int main()
{
EXPAND_MACR;
cout << foo;
return 0;
}
这是我的Python脚本
import sys
import clang.cindex
def visit(node):
if node.kind in (clang.cindex.CursorKind.MACRO_INSTANTIATION, clang.cindex.CursorKind.MACRO_DEFINITION):
print 'Found %s Type %s DATA %s Extent %s [line=%s, col=%s]' % (node.displayname, node.kind, node.data, node.extent, node.location.line, node.location.column)
for c in node.get_children():
visit(c)
if __name__ == '__main__':
index = clang.cindex.Index.create()
tu = index.parse(sys.argv[1], options=clang.cindex.TranslationUnit.PARSE_DETAILED_PROCESSING_RECORD)
print 'Translation unit:', tu.spelling
visit(tu.cursor)
这是信息,我回来从铛:如果你观察
Found FOO Type CursorKind.MACRO_DEFINITION DATA <clang.cindex.c_void_p_Array_3 object at 0x10b86d950> Extent <SourceRange start <SourceLocation file 'sample.cpp', line 4, column 9>, end <SourceLocation file 'sample.cpp', line 4, column 17>> [line=4, col=9]
Found EXPAND_MACR Type CursorKind.MACRO_DEFINITION DATA <clang.cindex.c_void_p_Array_3 object at 0x10b86d950> Extent <SourceRange start <SourceLocation file 'sample.cpp', line 6, column 9>, end <SourceLocation file 'sample.cpp', line 8, column 11>> [line=6, col=9]
Found EXPAND_MACR Type CursorKind.MACRO_INSTANTIATION DATA <clang.cindex.c_void_p_Array_3 object at 0x10b86d950> Extent <SourceRange start <SourceLocation file 'sample.cpp', line 12, column 2>, end <SourceLocation file 'sample.cpp', line 12, column 13>> [line=12, col=2]
我python脚本,node.data给出
DATA <clang.cindex.c_void_p_Array_3 object at 0x10b86d950>
我可以读程度上铛&然后从开始分析该文件到结束位置来获取返回值数据。我想知道,是否存在获取宏观价值的更好方法?
我想直接获取宏的值()(不使用Extent)。我怎么弄到的?
此外,对于EXPAND_MACR是想int foo = 61
我已经看到这些后:Link-1 & Link-2。
任何帮助将不胜感激