#P1031. C文件的秘密
C文件的秘密
背景
你们知道一个C文件从产生,到最后在我们的电脑上运行出结果,这中间经历了什么吗?(C语言的编译过程)
通常情况下,一个C文件(.c)需要经过4个步骤才能最终产生可被计算机识别并合理运行的程序(.out)
-
预处理:把.c文件处理成.i文件
-
编译:把.i文件处理成.s文件
-
汇编: 把.s文件处理成.o文件
-
链接:把.o的文件链接成.out文件
(具体涵义及详细信息在此不赘述,我们假设,任何一个.c文件都必须依次经过前三个步骤,并将最终所有的.o文件执行最后一个步骤,即链接成一个最终的可执行文件main.out)
题目描述
规定,用一个文件命名的后缀来区分其为何种文件(.c|.i|.s|.o|.out)
题目将随机给出一些文件,他们都属于前四种文件(.c|.i|.s|.o) 你需要将所有文件按照背景里指出的前三个步骤生成.o文件并且最终把所有.o文件生成为main.out文件。(PS:当然我们只需要通过修改文件的名字,来模拟进行这一系列操作,真实的操作需要用到一系列工具链(编译器,汇编器,链接器等等),你们所用的C语言的IDE集成了这些工具链)
Format
格式详见Samples中给出的例子
Input
随机的以(.c|.i|.s|.o)结尾的文件名(详见sample)
Output
给出每个文件具体的操作过程,以及最终合成过程,注意,给出的文件名是以文件名中数字从小到大给出的,最终输出也遵守这个顺序(详见sample)
Samples
test1.c
test2.c
test3.i
test4.o
test5.s
test1.c->test1.i->test1.s->test1.o
test2.c->test2.i->test2.s->test2.o
test3.i->test3.s->test3.o
test4.o
test5.s->test5.o
test1.o+test2.o+test3.o+test4.o+test5.o->main.out
Limitation
1s, 1024KiB for each test case.
想必有人已经发现,怎么没有看到熟悉的.h文件呢?这里刻意省略了,而且.h文件与上面给出的几种文件有所不同,它其实早在.c文件被预处理的时候就被展开进.i文件了。C语言的编译原理,会在当你们学习到多文件编程的时候正式遇到,理解了编译原理,才可以说真正开始形成了做一个“工程”的能力。