我目前正忙着使用libclang库。
我的目标是解析包含带参数的宏的代码,并获取宏参数的类型以便进行语法着色。
如果我们考虑以下代码
#define MACRO(X) X
typedef struct
{
int a;
} aType;
aType data;
int var = MACRO(data.a);
我的目标是能够在a
行上为结构aType
的字段int var = MACRO(data.a)
着色。即每当我在a
变量的data
字段上获取光标时,我想获取行,列和类型。
问题在于,只要我将光标放在角色a
的位置上,其类型就是CXCursor_MacroExpansion
。我已经尝试获取引用的光标(通过clang_getCursorReferenced
),但后来我得到了一个游标类型CXCursor_MacroDefinition
。
我也已经尝试通过clang_visitChildren
访问孩子,但这也会返回光标本身,所以没用。
如果我可以使用CXCursor_MemberRefExpr
类型从光标中获取类型为CXCusor_MacroExtension
的游标,我会得到我需要的内容。
当光标超过宏扩展时,有没有人知道如何实际获取扩展代码iso获取CXCursor_MacroExpansion
的信息?
非常感谢你的时间和帮助。
亲切的问候,
劳伦