1

使用 pycparser 解析大量 .c 源文件,但解析器无法处理 #included 库中的许多内容,而且我真的不需要它们来达到我的目的。我不需要编译它,只需要从我正在处理的特定 .c 生成 AST。我现在传递的 cpp args 是:

cpp_args=["-D__attribute__=","-D__extension__=","-D__builtin_va_list=void*"]

有任何想法吗?

谢谢!

4

2 回答 2

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
于 2012-04-27T16:05:35.073 回答
0

一种解决方案是使用#include 保护

如果您在每个标题中都有传统的包装器,例如。

#ifndef THIS_FILE_H
#define THIS_FILE_H

   // stuff

#endif

然后你可以简单地#define所有你想忽略的标题保护标签

于 2012-04-27T16:01:13.750 回答