1972 年,Dennis Ritchie 在贝尔实验室创造了 C 语言。半个多世纪过去,它依然是操作系统、嵌入式设备和各类底层软件的基石。学会 C,你将真正理解"程序是如何与硬件对话的"。这篇文章带你完成从环境搭建到跑通第一个程序的全部过程。
1. 为什么还要学 C
很多语言都"更友好",但 C 的地位无法被取代:Linux 内核、MySQL、Python 的解释器 CPython,底层都是 C 写的。学习 C 能让你明白内存、指针、编译这些"计算机的底层真相",之后再学任何语言都会事半功倍。
2. 搭建开发环境
你需要两样东西:编译器和编辑器。
- Windows:安装 MinGW-w64 或 WSL,把
gcc加入 PATH。 - macOS:安装 Xcode Command Line Tools,自带
clang编译器。 - Linux:
sudo apt install build-essential一步到位。
编辑器推荐 VS Code + C/C++ 插件,或直接用 Vim / CLion。装好后在终端输入 gcc --version 验证是否成功。
3. 第一个程序:Hello, World
新建文件 hello.c,输入以下代码——这是每个 C 程序员的成人礼:
#include <stdio.h>
int main(void) {
printf("Hello, World!\n");
return 0;
}
逐行解读:#include <stdio.h> 引入标准输入输出头文件;main 是程序入口,每个程序有且只有一个;printf 负责打印;return 0 表示程序正常结束。
4. 编译与运行
C 是编译型语言,必须先翻译成机器码才能执行。打开终端,在 hello.c 所在目录运行:
gcc hello.c -o hello
./hello
# 输出: Hello, World!
-o hello 指定输出文件名。编译成功后目录里会多出一个可执行文件 hello,它已经是纯粹的机器指令了。
5. 编译流程与常见报错
一条 gcc 命令背后是四个阶段:预处理 → 编译 → 汇编 → 链接。新手最常见的三个报错:
| 报错信息 | 原因 | 解决办法 |
|---|---|---|
| undefined reference to `main' | 没有 main 函数 | 检查函数名拼写是否一致 |
| fatal error: stdio.h: No such file | 头文件写错 | 确认是 #include 而非其他拼写 |
| missing terminating " character | 字符串缺少引号 | 检查 printf 的引号是否成对 |
6. 动手练习
把下面的程序抄一遍、改一改,感受 C 的风格:
#include <stdio.h>
int main(void) {
int a = 3, b = 5;
printf("%d + %d = %d\n", a, b, a + b);
return 0;
}
试着把 + 改成 -、*、/,再打印一句你的名字,你就完成了第一次真正的实战。
💡 学习建议:不要只看不敲。把每个示例都亲手编译运行一遍,遇到报错先自己读三遍再查资料——调试能力就是这样一点点练出来的。