如何使用libclang获取原始文字的值?libclang获取原始值
例如,如果我有一个CXCursor类型的CXCursor_IntegerLiteral,我如何提取字面值。
UPDATE:
我碰到使用libclang这么多的问题。我强烈建议完全避免它,而是使用Clang提供的C++接口。 C++的接口是高度可用的和非常有据可查:http://clang.llvm.org/doxygen/annotated.html
我现在看到libclang的唯一目的是产生ASTUnit对象为你与下面的代码(这不太容易,否则):
ASTUnit * astUnit;
{
index = clang_createIndex(0, 0);
tu = clang_parseTranslationUnit(
index, 0,
clangArgs, nClangArgs,
0, 0, CXTranslationUnit_None
);
astUnit = static_cast<ASTUnit *>(tu->TUData);
}
现在你可能会说libclang是稳定的,而C++接口不是。这并不重要,因为你花时间用libclang来计算AST,并且用它创建kludges浪费了你很多时间。我只花了几个小时修复了版本升级后无法编译的代码(如果需要的话)。
那太酷了!这就是说,你知道如何让你的或我的解决方案在原始源代码中使用宏吗?也就是说,如果我有'#define N 1'' int x = N',最好从这里取代'1'而不是'N'或空字符串。那么复杂的宏又如何呢? –
为什么它会返回一个额外的;之后1.我观察到clang_getCursorExtent()也返回一个额外的列之后的整数文字。为什么这样做是因为游标是INTEGERLITERAL类型的 – simar