使用 pycparser 解析大量 .c 源文件,但解析器无法处理 #included 库中的许多内容,而且我真的不需要它们来达到我的目的。我不需要编译它,只需要从我正在处理的特定 .c 生成 AST。我现在传递的 cpp args 是:
cpp_args=["-D__attribute__=","-D__extension__=","-D__builtin_va_list=void*"]
有任何想法吗?
谢谢!
使用 pycparser 解析大量 .c 源文件,但解析器无法处理 #included 库中的许多内容,而且我真的不需要它们来达到我的目的。我不需要编译它,只需要从我正在处理的特定 .c 生成 AST。我现在传递的 cpp args 是:
cpp_args=["-D__attribute__=","-D__extension__=","-D__builtin_va_list=void*"]
有任何想法吗?
谢谢!
尝试-nostdinc
为预处理器指定选项(并确保您没有传递任何-I
选项)。鉴于此输入foo.c
:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv) {
return 0;
}
跑步:
cpp -nostdinc foo.c
给我:
# 1 "foo.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "foo.c"
int main(int argc, char **argv) {
return 0;
}
以及以下错误:
foo.c:1:19: error: no include path in which to search for stdio.h
foo.c:2:20: error: no include path in which to search for stdlib.h
foo.c:3:20: error: no include path in which to search for unistd.h
一种解决方案是使用#include 保护
如果您在每个标题中都有传统的包装器,例如。
#ifndef THIS_FILE_H
#define THIS_FILE_H
// stuff
#endif
然后你可以简单地#define
所有你想忽略的标题保护标签