目录
- 为什么选择在 Linux 下学习 C 语言?
- 环境准备
- 1 选择 Linux 发行版
- 2 安装必要的工具
- 你的第一个 C 程序: "Hello, World!"
- 1 编写代码
- 2 编译代码
- 3 运行程序
- 4 解释代码
- 核心概念详解
- 1
main函数 - 程序的入口 - 2
#include- 预处理指令 - 3
printf函数 - 标准输出 - 4
return语句 - 程序的退出状态
- 1
- 进阶主题
- 1 使用
gcc编译选项 - 2 使用调试器
gdb - 3 使用
Makefile进行项目管理
- 1 使用
- 推荐资源与学习路径
为什么选择在 Linux 下学习 C 语言?
- 系统级编程的摇篮:Linux 内核本身就是用 C 语言编写的,在 Linux 下学习 C,你能最直接地接触到操作系统 API、文件系统、进程、内存管理等核心概念。
- 强大的开发工具链:Linux 拥有一套业界公认最优秀的免费开发工具,如 GCC (编译器)、GDB (调试器)、Make (构建工具)、Valgrind (内存分析器) 等,这些工具功能强大且灵活。
- 接近底层:相比 Windows,Linux 提供了更少的抽象层,让你能更清晰地看到 C 代码如何与硬件和操作系统交互。
- 开源生态:海量的开源项目都是基于 Linux 和 C 语言开发的,阅读这些项目的源码是提升水平的最佳途径之一。
环境准备
1 选择 Linux 发行版
对于初学者,推荐选择用户友好、社区支持好的发行版:

- Ubuntu:最流行的选择,软件包丰富,社区庞大,非常适合新手。
- Linux Mint:基于 Ubuntu,界面更传统,开箱即用,体验非常流畅。
- Fedora:对新技术支持较好,是 Red Hat 系列的先锋。
2 安装必要的工具
你只需要一个文本编辑器和一个 C 编译器,几乎所有的 Linux 发行版都自带了这些工具,或者可以轻松安装。
打开终端
你可以通过快捷键 Ctrl + Alt + T 打开终端,这是你在 Linux 下进行命令行操作的主要窗口。
更新软件包列表

这是一个好习惯,确保你安装的是最新版本的软件。
sudo apt update # 对于 Debian/Ubuntu 及其衍生版
(sudo 表示以超级用户身份执行命令,需要输入你的用户密码)。
安装 GCC 编译器
GCC (GNU Compiler Collection) 是 Linux 下最标准的 C/C++ 编译器。

sudo apt install build-essential
build-essential 是一个元数据包,它会自动为你安装 GCC、G++、Make 等构建 C/C++ 程序所必需的核心工具。
安装一个你喜欢的文本编辑器
- Vim / Neovim:功能极其强大的编辑器,但学习曲线较陡峭,适合追求效率的开发者。
sudo apt install vim
- Nano:简单易用,对新手非常友好。
sudo apt install nano
- VS Code:现代的图形化代码编辑器,拥有强大的插件生态,是许多开发者的首选。
# 下载 .deb 安装包并安装是推荐方式 wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg sudo install -o root -g root -m 644 packages.microsoft.gpg /etc/apt/trusted.gpg.d/ echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | sudo tee /etc/apt/sources.list.d/vscode.list sudo apt update sudo apt install code
你的第一个 C 程序: "Hello, World!"
这是编程世界的传统仪式。
1 编写代码
-
在终端中,使用
mkdir创建一个工作目录,并用cd进入它。mkdir my-c-project cd my-c-project
-
使用
nano编辑器创建一个名为hello.c的文件。nano hello.c
-
在打开的编辑器中,输入以下代码:
#include <stdio.h> int main() { printf("Hello, Linux World!\n"); return 0; } -
按
Ctrl + X,然后按Y,最后按Enter来保存并退出nano。
2 编译代码
我们使用 gcc 编译器将 hello.c 转换为可执行文件。
在终端中输入以下命令:
gcc hello.c -o hello
gcc:调用 GCC 编译器。hello.c:你的源文件。-o hello:指定输出的可执行文件名为hello,如果不写-o,默认会生成一个名为a.out的文件。
如果编译成功,终端不会有任何提示,但你会发现当前目录下多了一个名为 hello 的文件,你可以用 ls 命令查看:
ls -l
你会看到类似这样的输出:
-rwxr-xr-x 1 user user 8608 Oct 26 10:30 hello
注意文件权限中的 x,这表示它是一个可执行文件。
3 运行程序
在终端中,输入以下命令来运行你的程序:
./hello
- 是告诉终端在当前目录下寻找并执行这个程序。
你应该会在终端看到输出:
Hello, Linux World!
恭喜!你已经成功在 Linux 下编写、编译并运行了你的第一个 C 程序!
4 解释代码
#include <stdio.h>:这是一个预处理指令,它告诉编译器在编译之前,把标准输入输出库stdio.h的内容包含进来,这个库包含了像printf这样的函数的声明。int main() { ... }:这是程序的入口函数,当你的程序启动时,操作系统会首先执行main函数里的代码。int表示这个函数在执行完毕后会返回一个整数。printf("Hello, Linux World!\n");:调用printf函数,在屏幕上打印引号内的字符串。\n是一个“换行符”,表示打印完字符串后,光标移动到下一行。
return 0;:main函数返回0,在 Unix/Linux 系统中,程序返回0通常表示程序成功执行,没有发生错误,返回非零值则表示发生了错误。
核心概念详解
1 main 函数 - 程序的入口
每个 C 程序都必须有一个 main 函数,它是操作系统开始执行你代码的地方,标准的写法是 int main(void) 或 int main(int argc, char *argv[]),但我们现在从最简单的 int main() 开始。
2 #include - 预处理指令
#include 用于在编译前插入其他文件的内容,尖括号 < > 表示在标准系统目录中查找该文件(如 /usr/include),双引号 则通常表示在当前目录或你指定的路径中查找。
<stdio.h>:标准输入输出库,用于处理控制台的输入和输出。<stdlib.h>:标准库,包含内存分配、随机数、进程控制等函数。<string.h>:字符串处理库。<unistd.h>:Unix 标准库,提供 POSIX 操作系统 API,如sleep()、getpid()等。
3 printf 函数 - 标准输出
printf 是最常用的输出函数,它使用格式化字符串来定义输出的样式。
%d:用于打印整数。%f:用于打印浮点数。%c:用于打印单个字符。%s:用于打印字符串。- 用于打印一个百分号本身。
示例:
#include <stdio.h>
int main() {
int age = 25;
float height = 1.75;
char name[] = "Alice";
printf("Name: %s\n", name);
printf("Age: %d\n", age);
printf("Height: %.2f meters\n", height); // .2f 表示保留两位小数
return 0;
}
4 return 语句 - 程序的退出状态
return 语句用于从函数中返回一个值,对于 main 函数,这个返回值会传递给操作系统,称为“退出状态码”或“返回码”。
return 0;:成功。return 1;或其他非零值:失败或出错。
你可以通过 echo $? 命令查看上一个程序的退出状态。
./your_program echo $?
进阶主题
1 使用 gcc 编译选项
gcc 有很多有用的选项,可以帮你更好地控制编译过程。
-Wall:开启所有常见的警告。强烈建议始终使用此选项!gcc -Wall hello.c -o hello
-g:在可执行文件中加入调试信息,使用 GDB 调试时必须。gcc -g -Wall hello.c -o hello
-O2或-O3:优化代码,生成更高效的可执行文件。gcc -O2 -Wall hello.c -o hello
2 使用调试器 gdb
当你的程序出现逻辑错误时,gdb 是你的好朋友。
-
用
-g选项重新编译你的程序。gcc -g -Wall hello.c -o hello
-
启动
gdb。gdb ./hello
-
常用 GDB 命令:
run(或r):运行程序。break main(或b main):在main函数处设置一个断点。next(或n):执行下一行代码(不进入函数)。step(或s):执行下一行代码(如果遇到函数,则进入函数)。print <变量名>(或p <变量名>):打印变量的值。continue(或c):继续运行,直到下一个断点。quit(或q):退出 GDB。
3 使用 Makefile 进行项目管理
当你的项目文件变多时,每次手动输入 gcc 命令会很麻烦。Makefile 和 make 命令可以自动化这个过程。
创建一个名为 Makefile 的文件(注意没有后缀名):
# 定义变量
CC = gcc
CFLAGS = -Wall -g
TARGET = hello
SRCS = hello.c
# 默认目标
all: $(TARGET)
# 链接规则
$(TARGET): $(SRCS)
$(CC) $(CFLAGS) -o $@ $^
# 清理规则
clean:
rm -f $(TARGET)
# .PHONY 表示这是一个伪目标,不生成文件
.PHONY: all clean
使用方法:
- 在终端输入
make,它会自动执行all目标,编译hello.c。 - 输入
make clean,会删除生成的可执行文件。
Makefile 看起来复杂,但它能极大地简化大型项目的编译过程。
推荐资源与学习路径
-
书籍:
- 《C Primer Plus》:C 语言的经典入门书籍,讲解非常详细,适合零基础。
- 《C 程序设计语言》:C 语言之父写的书,简洁而深刻,适合有一定基础后阅读。
- 《计算机程序的构造和解释》:虽然主要是讲 Scheme,但其中的思想对学习任何语言都大有裨益。
-
在线教程:
- Learn C the Hard Way:通过动手实践来学习,强调动手能力。
- GeeksforGeeks / Tutorialspoint:优秀的 C 语言参考和教程网站,可以快速查找特定知识点。
-
学习路径建议:
- 掌握基础:变量、数据类型、运算符、流程控制(
if-else,for,while)、函数。 - 深入核心:数组、指针(这是 C 语言的精髓,务必花时间搞懂)、字符串处理、结构体。
- 内存管理:学习
malloc、free等动态内存分配函数,理解栈和堆的区别。 - 文件 I/O:学习如何使用
fopen、fread、fwrite、fclose等函数读写文件。 - Linux 系统编程:开始探索
unistd.h、sys/stat.h等头文件中的系统调用,学习进程控制、信号处理、多线程等。
- 掌握基础:变量、数据类型、运算符、流程控制(
祝你在 Linux C 语言的世界里探索愉快!这是一个充满挑战和乐趣的旅程。
