使用pycparser解析大量的.c源文件,但是解析器无法处理#included库中的很多东西,我真的不需要它们用于我的目的。我不需要编译,只需要从特定的.c生成AST我正在处理。 我正在传递的cpp args是:
cpp_args=["-D__attribute__=","-D__extension__=","-D__builtin_va_list=void*"]
有什么想法吗?
谢谢!
答案 0 :(得分:4)
尝试为预处理器指定-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
答案 1 :(得分:0)
一种解决方案是使用#include guards
如果每个标题中都有传统的包装,例如
#ifndef THIS_FILE_H
#define THIS_FILE_H
// stuff
#endif
然后你可以简单地#define
要忽略的所有标题保护标记