我如何跳过包含使用libclang?

mc_*_*rum 4 parsing objective-c libclang

我使用libclang来解析一个客观的c源代码文件.以下代码查找所有Objective-C实例方法声明,但它也在包含中找到声明:

 enum CXCursorKind curKind  = clang_getCursorKind(cursor);
 CXString curKindName  = clang_getCursorKindSpelling(curKind);

 const char *funcDecl="ObjCInstanceMethodDecl";

 if(strcmp(clang_getCString(curKindName),funcDecl)==0{


 }
Run Code Online (Sandbox Code Playgroud)

如何跳过包含标题的所有内容?我只对源文件中我自己的Objective-C实例方法声明感兴趣,而不是任何包含.

例如,不应包括以下内容

...

Location: /System/Library/Frameworks/Foundation.framework/Headers/NSObject.h:15:9:315
Type: 
TypeKind: Invalid
CursorKind: ObjCInstanceMethodDecl

...
Run Code Online (Sandbox Code Playgroud)

rap*_*ard 9

回答这个问题,因为我无法相信硬编码路径比较是唯一的解决方案,实际上,有一个clang_Location_isFromMainFile函数可以完全按照您的需要进行操作,因此您可以在访问者中过滤掉不需要的结果,如下所示:

if (clang_Location_isFromMainFile (clang_getCursorLocation (cursor)) == 0) {
  return CXChildVisit_Continue;
}
Run Code Online (Sandbox Code Playgroud)