有什么办法让c预处理器忽略所有#include的?

时间:2012-04-27 15:55:38

标签: c c-preprocessor

使用pycparser解析大量的.c源文件,但是解析器无法处理#included库中的很多东西,我真的不需要它们用于我的目的。我不需要编译,只需要从特定的.c生成AST我正在处理。 我正在传递的cpp args是:

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

有什么想法吗?

谢谢!

2 个答案:

答案 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要忽略的所有标题保护标记