c - 如何部分预处理具有特定工作目录的 C 文件

标签 c c-preprocessor

我只想扩展我工作目录的一个 C 文件的 include 指令;不是系统目录。

我尝试了以下方法:

gcc -E -nostdinc -I./ input.c

但是当它在input.c 中找不到包含的系统头文件时它会停止预处理。我希望它在找不到 include 指令时复制它并继续预处理文件。

最佳答案

如果您的 input.c 文件包含一些系统 header ,预处理器在找不到它们时崩溃是正常的。

您可以先使用 grep -v 删除代码中所有 #include 的系统 header ,实现如下(列表并不详尽):

grep -vE "(stdio|stdlib)\.h" code.c > code_.c

例如你得到:

#define EXITCODE 0
int main(){
  int i = EOF;
  printf("hello\n");
  return EXITCODE;
}

然后预处理:

S:\c>gcc -E code_.c
# 1 "code_.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "code_.c"

int main(){
  int i = EOF;
  printf("hello\n");
  return 0;
}

请注意,预处理器不关心未定义的函数或宏。您得到的是预处理代码(并且扩展了宏),而不是系统代码。

当然,您还必须处理所有包含的文件。这意味着需要额外的工具层来创建临时源文件并从那里开始工作。

关于c - 如何部分预处理具有特定工作目录的 C 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45786260/

相关文章:

在 C 编程中转换数组字符

c - 每当我执行代码时都会得到 "-317629566"

c - C程序仅在GCC中执行后才终止

计算总 sizeof 参数的 C 函数

c++ - 使用#define 宏来规范类声明

c - 参数化包括

创建一个非阻塞定时器来删除数据

c - 嵌套 C 宏、CRC 计算、Eclipse Java 崩溃

c - 备注: unrecognized token warning for the macro concatenation

c - 如何将无符号字符数组解释为十六进制数组?