1972 年,Dennis Ritchie 在贝尔实验室创造了 C 语言。半个多世纪过去,它依然是操作系统、嵌入式设备和各类底层软件的基石。学会 C,你将真正理解"程序是如何与硬件对话的"。这篇文章带你完成从环境搭建到跑通第一个程序的全部过程。

1. 为什么还要学 C

很多语言都"更友好",但 C 的地位无法被取代:Linux 内核、MySQL、Python 的解释器 CPython,底层都是 C 写的。学习 C 能让你明白内存、指针、编译这些"计算机的底层真相",之后再学任何语言都会事半功倍。

2. 搭建开发环境

你需要两样东西:编译器编辑器

编辑器推荐 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;
}

试着把 + 改成 -*/,再打印一句你的名字,你就完成了第一次真正的实战。

💡 学习建议:不要只看不敲。把每个示例都亲手编译运行一遍,遇到报错先自己读三遍再查资料——调试能力就是这样一点点练出来的。