第零二章 • 安装

代码编辑器其实就是一个更适合写代码的文本编辑器。它提供一些诸如关键字高亮,智能提示等功能帮助我们更快更好的编写代码。

  • Linux 上,我建议你用 gedit。不过如果你手头上有现成的代码编辑器也是可以的,但请不要使用 IDE。杀鸡焉用宰牛刀,本书构建的小小程序不会用到 IDE 所提供的便利,反而让你不清楚发生了什么。
  • Mac OS X 上,一个可以使用的编辑器是 TextWrangler,如果你有其他喜欢的,也是可以的,但请不要使用 Xcode,这种小项目使用 IDE 反而会让你搞不清楚细节。

编译器

编译器的作用是将我们写好的 C 语言的代码翻译成电脑能够直接运行的程序。不同的操作系统安装编译器的过程也是有差别的。

另外编译和运行 C 程序需要知道一些基本的命令行操作,本书不会教你怎么使用命令行。如果你从来没听说过命令行,你可以到网上搜一些教程看看。

  • Linux 上,你可以通过下载并安装开发包获得 C 语言的编译器。如果你的系统是 Ubuntu 或 Debian,你可以通过这行命令来安装:。
  • Mac OS X 上,你需要在应用商店里下载并安装最新版的 Xcode。然后在命令行中运行 xcode-select --install 来安装 Command Line Tools
  • Microsoft Windows 上,你可以下载并安装 MinGW,具体的安装及配置方法可以到网上搜几个教程看一看,这里不再细说。

测试安装好的 C 编译器

为了验证一下 C 编译器是否安装成功了,请在命令行中键入下面的语句并运行:

cc --version

如果你得到了一些关于编译器版本的信息,那就说明安装成功了!譬如,在我的 Mac 上,返回信息如下所示:

至此,环境搭建工作已经完成了。现在打开你的代码编辑器,将下方的代码输入到其中。新建一个文件夹,用于存放编写的代码。并把刚刚的代码保存到这个文件夹中,起名为 hello_world.c。这就是我们的第一个 C 程序啦!

第一行,我们包含了一个名为 stdio.h 的头文件进来。这条语句让我们可以使用标准输入输出库所提供的函数。

接下来,我们声明一个名为 main 的函数,该函数接受一个 int 类型的输入 argc,和一个 char** 类型的输入 argv,返回 类型的值。所有的 C 程序都必须包含 main 函数,它是程序执行的起点。

main 函数当中调用了一个名为 puts 的函数(这个函数就是由 stdio.h 提供给我们的哦),并传递了 “Hello, world!” 参数,这个函数会将传进去的 Hello, world! 输出到命令行中。puts 是 put string 的简写形式。函数中的第二条语句是 return 0;。它的作用是结束 main 函数并返回 0 值。0 代表程序正常退出,没有发生错误。

编译

在运行这个程序之前,我们首先要将它编译成可执行的程序。打开命令行,然后跳转到 hello_world.c 被保存的目录。你可以通过运行以下命令来编译你的程序:

cc -std=c99 -Wall hello_world.c -o hello_world

这条语句编译了 hello_world.c 里面的代码,产生了一个新的可执行文件,叫做 。-std=c99 是为了告诉编译器我们使用的是哪个标准的 C 语言。通过指定标准,只要我们写的程序符合标准的规范,我们的程序就可以在多个平台上编译并运行。

如果编译成功了,你会在 hello_world.c 同目录下看到一个名为 hello_world 的新文件。在命令行里面敲入 ./hello_world ,按一下回车键,就可以运行这个程序了。会在命令行打印出 Hello, world! 字样。

错误

如果你的 C 语言程序写的存在问题,可能会导致编译失败。这个错误可能是简单的语法错误,也可能是其他的一些难以理解的复杂错误。

编译失败后,编译器会向你提供一些有用的错误信息,如果你看不懂,可以到网上搜索一下。你要相信,在你之前肯定有很多人遇到了和你一样的错误。另外,程序中可能同时存在多个错误,记得要从第一条开始解决。

而有时,程序虽然编译成功了,但是运行的时候却崩溃掉了。这就需要对程序进行一些调试性的工作,设法找出问题所在。调试程序是进阶内容,超出了本书的讨论范围。

在本书提供的代码中,可能会遇到一些你从来没有见过的函数。如果想知道这个函数的作用,应该去查找 C 语言标准库的在线文档,这个文档中介绍了 C 语言中所有的标准库函数的作用及其用法。

参考

hello_world.c

彩蛋

彩蛋是用来干嘛的?

在彩蛋部分,我通常会提出一些有趣的,有挑战性的问题。请尽力尝试解决它们。你没有必要把它们全做出来,因为有些是很有难度的。

  • "Hello, world!" 改为其他的问候语。
  • 如果没有 main 函数,编译会得到什么错误?
  • 使用在线文档查看 puts 函数的用法。