1

我正在使用go-clang库来解析以下 C 文件:aac.c。出于某种原因,当我通过 clang 运行文件并转储 AST 时,我没有获得某些功能的 AST 输出。例如,C 文件包含文件的前向声明aac_ioctl_send_raw_srb和后面的实际定义。

鉴于此,我希望在输出中看到两个 AST 节点,但只有一个FuncDecl(前向声明)被转储:

clang -Xclang -ast-dump -fsyntax-only aac.c | grep "aac_ioctl_send_raw_srb" | wc -l
aac.c:38:10: fatal error: 'opt_aac.h' file not found
#include "opt_aac.h"
         ^
1 error generated.
       1 <--- wc output

(忽略错误)

我使用 go-clang 库从我自己的应用程序中解析 C 文件得到了相同的结果。有没有解释为什么定义没有被丢弃?

4

1 回答 1

1

我在#llvmIRC 中得到了一些帮助,有人建议错误实际上导致问题的原因。即使发出了其他节点,LLVM 也可能只是忽略了它认为需要位于缺失#includes 中的信息的节点。

我修复了包含路径,并且确实发出了我正在寻找的节点。

于 2016-02-15T23:04:49.567 回答