#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语言的编译原理,会在当你们学习到多文件编程的时候正式遇到,理解了编译原理,才可以说真正开始形成了做一个“工程”的能力。