1. 第零二章 • 安装
在开始学习 C 语言之前,我们需要安装一些必要的东西,搭建好编程的环境。好在过程并不复杂,我们只需要两个工具:代码编辑器和编译器。
1.1. 代码编辑器
代码编辑器其实就是一个更适合写代码的文本编辑器。它提供一些诸如关键字高亮,智能提示等功能帮助我们更快更好的编写代码。
- 在 Linux 上,我建议你用 gedit。不过如果你手头上有现成的代码编辑器也是可以的,但请不要使用 IDE。杀鸡焉用宰牛刀,本书构建的小小程序不会用到 IDE 所提供的便利,反而让你不清楚发生了什么。
- 在 Mac OS X 上,一个可以使用的编辑器是 TextWrangler,如果你有其他喜欢的,也是可以的,但请不要使用 Xcode,这种小项目使用 IDE 反而会让你搞不清楚细节。
- 在 Microsoft Windows 上,我建议你使用 Notepad++,如果你有其他喜欢的也是可以的啦。但是请不要使用 Visual Studio,因为它对 C 语言的支持并不好,使用它会遇到很多问题。
1.2. 编译器
编译器的作用是将我们写好的 C 语言的代码翻译成电脑能够直接运行的程序。不同的操作系统安装编译器的过程也是有差别的。
另外编译和运行 C 程序需要知道一些基本的命令行操作,本书不会教你怎么使用命令行。如果你从来没听说过命令行,你可以到网上搜一些教程看看。
- 在 Linux 上,你可以通过下载并安装开发包获得 C 语言的编译器。如果你的系统是 Ubuntu 或 Debian,你可以通过这行命令来安装:
sudo apt-get install build-essential
。 - 在 Mac OS X 上,你需要在应用商店里下载并安装最新版的 Xcode。然后在命令行中运行
xcode-select --install
来安装 Command Line Tools。 - 在 Microsoft Windows 上,你可以下载并安装 MinGW,具体的安装及配置方法可以到网上搜几个教程看一看,这里不再细说。
1.3. 测试安装好的 C 编译器
为了验证一下 C 编译器是否安装成功了,请在命令行中键入下面的语句并运行:
cc --version
如果你得到了一些关于编译器版本的信息,那就说明安装成功了!譬如,在我的 Mac 上,返回信息如下所示:
$ cc --version
Apple LLVM version 7.0.0 (clang-700.1.76)
Target: x86_64-apple-darwin15.0.0
Thread model: posix
1.4. Hello World
至此,环境搭建工作已经完成了。现在打开你的代码编辑器,将下方的代码输入到其中。新建一个文件夹,用于存放编写的代码。并把刚刚的代码保存到这个文件夹中,起名为 hello_world.c
。这就是我们的第一个 C 程序啦!
#include <stdio.h>
int main(int argc, char** argv) {
puts("Hello, world!");
return 0;
}
接下来我会一行一行的解释这个程序。
第一行,我们包含了一个名为 stdio.h
的头文件进来。这条语句让我们可以使用标准输入输出库所提供的函数。
接下来,我们声明一个名为 main
的函数,该函数接受一个 int
类型的输入 argc
,和一个 char**
类型的输入 argv
,返回 int
类型的值。所有的 C 程序都必须包含 main
函数,它是程序执行的起点。
在 main
函数当中调用了一个名为 puts
的函数(这个函数就是由 stdio.h 提供给我们的哦),并传递了 "Hello, world!" 参数,这个函数会将传进去的 Hello, world! 输出到命令行中。puts
是 put string 的简写形式。函数中的第二条语句是 return 0;
。它的作用是结束 main
函数并返回 0 值。0 代表程序正常退出,没有发生错误。
1.5. 编译
在运行这个程序之前,我们首先要将它编译成可执行的程序。打开命令行,然后跳转到 hello_world.c
被保存的目录。你可以通过运行以下命令来编译你的程序:
cc -std=c99 -Wall hello_world.c -o hello_world
这条语句编译了 hello_world.c
里面的代码,产生了一个新的可执行文件,叫做 hello_world
。-std=c99
是为了告诉编译器我们使用的是哪个标准的 C 语言。通过指定标准,只要我们写的程序符合标准的规范,我们的程序就可以在多个平台上编译并运行。
如果编译成功了,你会在 hello_world.c
同目录下看到一个名为 hello_world
的新文件。在命令行里面敲入 ./hello_world
,按一下回车键,就可以运行这个程序了。会在命令行打印出 Hello, world!
字样。
恭喜!你成功的编译并运行了你的第一个 C 程序!
1.6. 错误
如果你的 C 语言程序写的存在问题,可能会导致编译失败。这个错误可能是简单的语法错误,也可能是其他的一些难以理解的复杂错误。
编译失败后,编译器会向你提供一些有用的错误信息,如果你看不懂,可以到网上搜索一下。你要相信,在你之前肯定有很多人遇到了和你一样的错误。另外,程序中可能同时存在多个错误,记得要从第一条开始解决。
而有时,程序虽然编译成功了,但是运行的时候却崩溃掉了。这就需要对程序进行一些调试性的工作,设法找出问题所在。调试程序是进阶内容,超出了本书的讨论范围。
1.7. 文档
在本书提供的代码中,可能会遇到一些你从来没有见过的函数。如果想知道这个函数的作用,应该去查找 C 语言标准库的在线文档,这个文档中介绍了 C 语言中所有的标准库函数的作用及其用法。
1.8. 参考
参考是用来干嘛的?
在参考部分,我通常会给出这章中用到的代码作为总览。如果你自己写的程序遇到了错误,请不要把这里的代码简单的拷贝粘贴就完事了。一定要自己尝试着找出错误,并解决它。
hello_world.c
#include <stdio.h>
int main(int argc, char** argv) {
puts("Hello, world!");
return 0;
}
1.9. 彩蛋
彩蛋是用来干嘛的?
在彩蛋部分,我通常会提出一些有趣的,有挑战性的问题。请尽力尝试解决它们。你没有必要把它们全做出来,因为有些是很有难度的。
- 将
"Hello, world!"
改为其他的问候语。 - 如果没有
main
函数,编译会得到什么错误? - 使用在线文档查看
puts
函数的用法。