编写一个简单的 C 程序

目录汇总:C 语言零基础入门教程

与用其他语言编写的程序相比,C 程序较少要求“形式化的东西”。一个完整的 C 程序可以只有寥寥数行。

程序 显示双关语

在 Kernighan 和 Ritchie 编写的经典 C 语言著作《C 程序设计语言》中,第一个程序是极其简短的。它仅仅输出了一条 hello, world 消息。与大多数 C 语言零基础入门教程 不同,我不打算用这个程序作为第一个 C 程序示例,而更愿意尊重 C 语言的另一个传统:显示双关语。下面是一条双关语:

1
To C, or not to C: that is the question.

下面这个名为 pun.c 的程序会在每次运行时显示上述消息。

pun.c

1
2
3
4
5
6
7
#include <stdio.h>

int main(void)
{
 printf("To C, or not to C: that is the question.\n");
 return 0;
}

一个简单的 C 程的序的一般形式 会对这段程序中的一些格式进行详尽的说明,这里仅做简要介绍。对本程序所要完成的操作来说,它的第一行

1
#include <stdio.h>

是必不可少的,它“包含”了 C 语言标准输入/输出库的相关信息。程序的可执行代码都在 main 函数中,这个函数代表“主”程序。main 函数中的第一行代码是用来显示期望信息的。printf 函数来自标准输入/输出库,可以产生完美的格式化输出。代码 \n 告诉 printf 函数执行完消息显示后要进行换行操作。第二行代码

1
return 0;

表明程序终止时会向操作系统返回值 0。

一、编译和链接

尽管 pun.c 程序十分简短,但是为运行这个程序而包含的内容可能比想象的要多。首先,需要生成一个含有上述程序代码的名为 pun.c 的文件(使用任何文本编辑器都可以创建该文件)。文件的名字无关紧要,但是编译器通常要求带上文件的扩展名 .c。

接下来需要把程序转化为机器可以执行的形式。对于 C 程序来说,转化通常包含下列 3 个步骤。

  • 预处理。首先程序会被交给预处理器(preprocessor)。预处理器执行以 # 开头的命令(通常称为指令)。预处理器有点类似于编辑器,它可以给程序添加内容,也可以修改程序。
  • 编译。修改后的程序现在可以进入编译器(compiler)了。编译器会把程序翻译成机器指令(即目标代码)。然而,这样的程序还是不可以运行的。
  • 链接。在最后一个步骤中,链接器(linker)把由编译器产生的目标代码和所需的其他附加代码整合在一起,这样才最终产生了完全可执行的程序。这些附加代码包括程序中用到的库函数(如 printf 函数)。

幸运的是,上述过程往往是自动实现的,因此人们会发现这项工作不是太艰巨。事实上,因为预处理器通常会和编译器集成在一起,所以人们甚至可能不会注意到它在工作。

根据不同的编译器和操作系统,编译和链接所需的命令也是多种多样的。在 UNIX 系统环境下,通常把 C 编译器命名为 cc。为了编译和链接 pun.c 程序,需要在终端或命令行窗口输入如下命令:

1
% cc pun.c

(字符 % 是 UNIX 系统的提示符,不需要输入。)在使用编译器 cc 时,系统自动进行链接操作,无须单独的链接命令。

在编译和链接好程序后,编译器 cc 会把可执行程序放到默认名为 a.out 的文件中。编译器 cc 有许多选项,其中一个选项(-o)允许为含有可执行程序的文件选择名字。例如,假设要把文件 pun.c 生成的可执行文件命名为 pun,那么只需输入下列命令:

1
% cc –o pun pun.c

GCC

GCC 是最流行的 C 编译器之一,它随 Linux 发行,但也有面向其他很多平台的版本。这种编译器的使用与传统的 UNIX cc 编译器相似。例如,编译程序 pun.c 可以使用以下命令:

1
% gcc –o pun pun.c

二、集成开发环境

到目前为止,我们一直通过在操作系统提供的特殊窗口中输入命令的方式来调用“命令行”编译器。事实上,还可以使用集成开发环境(integrated development environment, IDE)来编译。集成开发环境是一个软件包,我们可以在其中编辑、编译、链接、执行甚至调试程序。组成集成开发环境的各个部分可以协调工作。例如,当编译器发现程序中有错误时,它会让编辑器把包含出错代码的行突出显示。集成开发环境有很多种,本教程不打算一一讨论它们,但我建议读者了解一下自己的平台上可以运行哪些集成开发环境。

请参阅

(完)

comments powered by Disqus