“2015.12.26”的版本间的差异

来自软件实验室
跳转至: 导航搜索
(创建页面,内容为“一下是“编译多个文件”的学习,感觉有许多不明白的地方。 编译多个源文件 一个源程序可以分成几个文件。这样便于编...”)
 
(没有差异)

2015年12月26日 (六) 10:51的最新版本

一下是“编译多个文件”的学习,感觉有许多不明白的地方。


编译多个源文件

一个源程序可以分成几个文件。这样便于编辑与理解,尤其是程序非常大的时候。这也使各部分独立编译成为可能。

下面的例子中我们将程序 Hello World 分割成 3 个文件:‘hello.c’,‘hello_fn.c’和头文件‘hello.h’。这是主程序‘hello.c’:

   #include “hello.h”
   int main(void)
   {
   hello (“world”);
   return 0;
   }

在先前例子的‘hello.c’中,我们调用的是库函数 printf,本例中我们用一个定义在文件‘hello_fn.c’中的函数 hello 取代它。

主程序中包含有头文件‘hello.h’,该头文件包含函数 hello 的声明。我们不需要在‘hello.c’文件中包含系统头文件‘stdio.h’来声明函数 printf,因为‘hello.c’没有直接调用 printf。

文件‘hello.h’中的声明只用了一行就指定了函数 hello 的原型。

   void hello (const char * name);

函数 hello 的定义在文件‘hello_fn.c’中:

   #include <stdio.h>
   #include “hello.h”
   void hello (const char * name)
   {
   printf (“Hello, %s!\n”, name);
   }

语句 #include “FILE.h” 与 #include <FILE.h> 有所不同:前者在搜索系统头文件目录之前将先在当前目录中搜索文件‘FILE.h’,后者只搜索系统头文件而不查看当前目录。

要用gcc编译以上源文件,使用下面的命令:

   $ gcc -Wall hello.c hello_fn.c -o newhello

本例中,我们使用选项 -o 为可执行文件指定了一个不同的名字 newhello。注意到头文件‘hello.h’并未在命令行中指定。源文件中的的 #include “hello.h” 指示符使得编译器自动将其包含到合适的位置。

要运行本程序,输入可执行文件的路径名:

   $ ./newhello
   Hello, world!

源程序各部分被编译为单一的可执行文件,它与我们先前的例子产生的结果相同。