C 语言快速上手:环境搭建与第一个程序
更新时间:2026-08-26。本文是
languages/c/主题入门层第 0 篇,整个 C 语言系列的第一站。这一篇的目标只有一个:在你机器上把 C 跑起来,看到屏幕上打印出东西。别急着背语法,先把"写代码 → 编译 → 运行"这条路走通。
本文要回答的问题
- 写 C 需要装什么?在哪写?
hello.c是怎么变成可执行文件的?- 为什么本站老提
-O0 -g这个编译参数?
一、你需要准备什么
写 C 只需要两样东西:一个编辑器(写代码)和一个编译器(把代码变成机器指令)。二者缺一不可。
| 工具 | 作用 | 常用选择 |
|---|---|---|
| 编辑器 | 写代码 | Vim、VS Code、Neovim |
| 编译器 | 编译代码 | GCC、Clang |
在 Ubuntu / Debian 上装 GCC:
sudo apt update && sudo apt install -y build-essential
gcc --version # 验证安装其他发行版(CentOS/Rocky)用 dnf groupinstall "Development Tools";macOS 装 Xcode Command Line Tools;Windows 推荐 WSL 或 MSYS2。本站所有示例都假定你在 Linux 上——毕竟 perf、/proc、火焰图这些剖析手段只有 Linux 才有。
二、第一个程序
建一个目录,写一个文件 hello.c:
#include <stdio.h>
int main(void) {
printf("Hello, 极客教程\n");
return 0;
}然后编译运行:
gcc -O0 -g -o hello hello.c
./hello输出:Hello, 极客教程。
拆开看这几步发生了什么:
gcc是编译器,读入源文件hello.c;-o hello指定输出的可执行文件叫hello(不写的话默认叫a.out);-O0 -g是本站的默认编译约定,下面单独讲;./hello运行它——./表示"当前目录下的 hello",因为 Linux 不在当前目录找命令。
三、为什么本站坚持 -O0 -g
这俩参数看着不起眼,但对一个性能剖析网站来说是刻意为之:
| 参数 | 作用 | 本站的理由 |
|---|---|---|
-O0 | 不做优化,保留最直白的指令序列 | perf 火焰图里每行 C 代码都能对应到汇编,教学看得到"真相" |
-g | 生成调试符号与行号 | perf 才能把热点定位到具体源码行,gdb 才能断点调试 |
你可能会想:生产环境不都用 -O2 吗?没错。但本站的 demos/cpu-demo 恰恰演示了 -O2 下编译器把 sum += i 的热点循环整个消除掉——那是另一个教学点。学习阶段用 -O0 -g,你能看到"自己写的代码真实跑出来的样子"。
四、main 函数的返回值
main 返回 int,这是操作系统读的"退出码":
return 0:程序正常结束;return 1(或任意非零值):出错了。
在 shell 里用 echo $? 看退出码:
./hello
echo $? # 打印 0,因为 hello 返回了 0if 判断程序是否成功、shell 脚本里判断上一步是否失败,靠的都是这个返回值。习惯性"写完 main 就 return 0",是给系统的一个交代。
五、用 make 管理编译
单文件直接敲 gcc 就行,文件一多就要工具了。本站 demos 每个实验目录都自带 Makefile,cd 进去 make 就能编译:
hello: hello.c
gcc -O0 -g -o hello hello.c
clean:
rm -f hellomake 的好处:只重新编译有改动的文件,还能把编译命令固化下来,不用每次手敲。入门阶段知道 make 能帮你记住"怎么编译"就够了,Makefile 语法详见高手层。
六、常见的"跑不起来"
新手编译失败九成是这几种:
| 现象 | 原因 | 解决 |
|---|---|---|
command not found: gcc | 没装编译器 | 回到第一节装 build-essential |
undefined reference to 'main' | 文件里没有 main,或 main 拼写错了 | 检查是否写了 int main(void) |
hello: No such file or directory | 没加 ./ | 用 ./hello 运行 |
permission denied | 没有执行权限 | 用 chmod +x hello,或直接用 gcc 生成的默认权限 |
七、与本站主线衔接
- 本站全部 demo 都按
-O0 -g约定构建,见demos/cpu-demo; hello可执行文件的内部结构(段、符号、入口)是专家层 编译、链接与 ELF 的内容;- 程序怎么被加载、
main之前发生了什么,见 L5 ELF 与装载。
一句话总结
装好 gcc、写个 hello.c、用 gcc -O0 -g -o hello hello.c 编译、./hello 运行——这就是 C 的第一课;-O0 -g 保留真相供剖析,return 0 是给系统的交代,接下来就可以正式学语法了。
上一篇:C 语言主题总纲 下一篇:gcc 编译链接与运行