我无法使用libclang解析c ++中命名空间函数的主体。
我在类名称空间中有一个类:
namespace outer {
namespace inner {
class MyClass {
public:
short myMethod(){
return NTOHS(10);
}
short anotherMethod();
};
short MyClass::anotherMethod(){
return NTOHS(11);
}
short myFunction(){
return NTOHS(12);
}
}
}
使用libclang的python包装器,我可以通过递归找到每个节点:
def find_node(node):
print node # Just print stuff about the node (spelling, location, etc.)
for child in node.get_children():
find_node(child)
我能够在myMethod
和myFunction
中检测NTOHS的使用情况并打印有关这些节点的信息,但无法在MyClass::anotherMethod
中检测到它。
Someone else ran into a similar problem, but it doesn't seem to have been answered.
NTOHS这里只是用于将网络转换为主机顺序的linux / unix命令。
如何使用libclang在命名空间函数中检测NTOHS?
答案 0 :(得分:0)
我怀疑此问题可能与您的问题中没有的信息有关,并且可能取决于您使用的clang的平台和版本,以及您{39}的哪个版本{39}}重新引用。
在OSX Yostemite上,NTOHS
定义为:
NTOHS
要让你的样本编译,我必须引入一个临时的。
在Ubuntu 14.04上,#define NTOHS(x) (x) = ntohs((__uint16_t)x)
不在NTOHS
,但是/usr/include
是,并且定义为(类似):
ntohs
要让你的样本编译,我必须切换到#define ntohs(x) __bswap_16 (x)
。
为了完整起见,在Ubuntu 14.04上,我使用了这个样本:
ntohs
从#include <netinet/in.h>
namespace outer {
namespace inner {
class MyClass {
public:
short myMethod(){
return ntohs(10);
}
short anotherMethod();
};
short MyClass::anotherMethod(){
return ntohs(11);
}
short myFunction(){
return ntohs(12);
}
}
}
得到这个用clang 3.7的树(在我为libclang设置我的包含路径之后)
http://llvm.org/apt/trusty/