我只想扩展我工作目录的一个 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/