我正在浏览GCC手册页,我找到了以下内容:
file.i
C source code that should not be preprocessed.
我知道运行gcc -E foo.c
会在预处理后停止编译器;
但创建.i
文件的真实世界应用是什么。
还有一种方法可以生成除.i
以外的gcc foo.c -E > foo.i
个文件吗?
答案 0 :(得分:6)
.i
文件也称为" Pure C文件"。在预处理阶段
将包含页眉文件。
宏将被替换。
评论已删除。
用于条件编译。
如果查看.i
文件,您可以看到这些内容。
生成.i
文件的命令是 -
gcc -E foo.c -o foo.i
答案 1 :(得分:1)
一个file.i
文件是:
不应预处理的C源代码。
来源:man gcc
,然后搜索“ \.i
”。
详细步骤:man gcc
,然后按 / 键进行搜索,然后键入\.i
,然后按 Enter 键,然后反复按 n 键,直到找到它。
这意味着.i
文件是预处理的源代码,因此它已经包含:
...就像他的答案中的stated by @Sathish。您还会注意到gcc添加了很多特殊的“注释”,这些注释以#
字符开头,例如:
# 1 "main.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "/usr/include/stdc-predef.h" 1 3 4 # 1 "<command-line>" 2 # 1 "main.c" # 44 "main.c" # 1 "/usr/include/stdio.h" 1 3 4 # 27 "/usr/include/stdio.h" 3 4 # 1 "/usr/include/features.h" 1 3 4 # 374 "/usr/include/features.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4
请注意一个简单的程序,例如:
#include <stdio.h>
int main()
{
printf("hello world\n");
return 0;
}
编译与此:
gcc -Wall -std=c99 -O0 -save-temps=obj main.c -o ./bin/main
将产生一个长约682行的main.i
文件,上面显示的main()
函数恰好在最后。
.i
文件:我的首选是生成所有个中间文件(.i
,.o
,.s
,而不是仅使用{{ 1}}),一次全部放在项目的本地.i
文件夹中,如下所示:
-E
现在在“ foo / bin”目录中具有以下内容:
bin
使用以下程序当然运行程序:
mkdir bin
gcc -save-temps=obj foo.c -o ./bin/foo