clang_tokenize(tu,range,*tokens,*numTokens)遇到Macros无法返回tokens

@[libclang]@[tokenize Macros]
libclang遍历AST时,用cursor的操纵倒是挺方便的。想知道cursor对应的结点具体内容,可以利用clang_tokenize(tu,range,*tokens,*numTokens)获得特定cursor所在范围range内的tokens

CXToken *tokens;
unsigned int numTokens;
CXCursor *cursors = 0;
CXTranslationUnit opTu=clang_Cursor_getTranslationUnit(cursor);
CXSourceRange range=clang_getCursorExtent(cursor);
clang_tokenize(opTu, range, &tokens, &numTokens);

但是如果这个range中包含外部文件定义的宏,整个节点范围内返回的tokens是空的。有什么办法吗?

如下面的代码块,其中fun(a,b)不在当前main.c中。
在解析if的条件表达式fun(a,b)>0时,当前cursor是BinaryOperator,取来的tokens是空的。

//main.c
#include <stdio.h>
#include "myDefine.h"
int main()
{
    int a,b;
    if(fun(a,b)>0)//target
        printf("%d>%d\n",a,b);
    else
        printf("what ever.\n");
    return 0;
}
//myDefine.h
#ifndef MYDEFINE_H_INCLUDED
#define MYDEFINE_H_INCLUDED

#define fun(a,b) (a>b?1:0)

#endif // MYDEFINE_H_INCLUDED

其实也看了AST输出,这个位置上结点的范围记录的形如
<myDefine.h:startline:startcol , main.c:endline:endcol>
跨了文件了,怎么解?
其实我也不关心别的文件中的内容,就想能取出当前表达式中的运算符token“ >

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值