Linux下C语言编程入门,从何学起?

99ANYc3cd6
预计阅读时长 28 分钟
位置: 首页 C语言 正文

目录

  1. 准备工作:搭建你的 Linux C 语言开发环境
    • 1 你需要什么?
    • 2 安装 GCC (GNU Compiler Collection)
    • 3 安装 GDB (GNU Debugger)
    • 4 选择代码编辑器
  2. 第一个程序:Hello, World!
    • 1 编写代码
    • 2 保存文件
    • 3 使用 GCC 编译
    • 4 运行你的程序
  3. 深入 GCC:编译命令详解
    • 1 gcc -o
    • 2 gcc -c
    • 3 gcc -g
    • 4 gcc -Wall
    • 5 gcc -O2 (代码优化)
  4. 核心概念:C 语言基础
    • 1 main 函数:程序的入口
    • 2 #include <stdio.h>:引入标准输入输出库
    • 3 printf 函数:格式化输出
    • 4 变量与数据类型
    • 5 注释
  5. 动手实践:一个简单的计算器
    • 1 需求分析
    • 2 代码实现
    • 3 编译与运行
  6. 调试入门:使用 GDB 查找错误
    • 1 故意制造一个错误
    • 2 编译带调试信息的程序
    • 3 启动 GDB
    • 4 常用 GDB 命令
  7. 项目构建入门:Makefile
    • 1 为什么需要 Makefile?
    • 2 一个简单的 Makefile 示例
    • 3 使用 make 命令
  8. 学习路径与资源推荐
    • 1 进阶学习
    • 2 推荐书籍
    • 3 在线资源

准备工作:搭建你的 Linux C 语言开发环境

1 你需要什么?

  • 一台安装了 Linux 操作系统的电脑(推荐 Ubuntu, Debian, CentOS 等)。
  • 一个终端(Terminal / Shell),用于输入命令。
  • 一款你喜欢的代码编辑器(如 vim, nano, VS Code 等)。
  • 一个 C 语言编译器,我们将使用业界标准的 GCC (GNU Compiler Collection)

2 安装 GCC

打开你的终端,根据你的 Linux 发行版选择对应的命令:

linux操作系统下c语言编程入门
(图片来源网络,侵删)
  • 对于 Debian / Ubuntu / Mint 系统:

    sudo apt update
    sudo apt install build-essential

    build-essential 是一个软件包集合,它会自动安装 GCC、GDB 以及其他必要的构建工具。

  • 对于 Fedora / CentOS / RHEL 系统:

    sudo dnf groupinstall "Development Tools"
    # 或者使用 yum (对于旧版系统)
    # sudo yum groupinstall "Development Tools"

安装完成后,你可以通过以下命令验证 GCC 是否安装成功:

linux操作系统下c语言编程入门
(图片来源网络,侵删)
gcc --version

如果能看到 GCC 的版本信息,说明安装成功。

3 安装 GDB (GNU Debugger)

GDB 是一个强大的调试工具,对于查找程序中的逻辑错误至关重要,如果你上面安装了 build-essentialDevelopment Tools,GDB 通常已经包含在内,如果没有,可以单独安装:

  • Debian / Ubuntu:
    sudo apt install gdb
  • Fedora / CentOS:
    sudo dnf install gdb

4 选择代码编辑器

  • nano: 最简单的终端编辑器,适合初学者,打开文件:nano hello.c
  • vim / nvim: 功能强大的编辑器,但需要学习一些基本命令,打开文件:vim hello.c
  • VS Code: 图形化界面编辑器,插件丰富,体验好,需要先安装,然后安装 "C/C++" 扩展。

建议初学者使用 nano,因为它直观易用。


第一个程序:Hello, World!

这是学习任何一门编程语言的传统第一步。

1 编写代码

在终端中,使用 nano 编辑器创建一个名为 hello.c 的文件:

nano hello.c

然后输入以下代码:

#include <stdio.h>
int main() {
    printf("Hello, World!\n");
    return 0;
}

2 保存文件

nano 编辑器中:

  1. Ctrl + X
  2. 它会询问你是否保存,按 Y (代表 Yes)。
  3. Enter 确认文件名 hello.c

现在你已经成功创建并保存了你的第一个 C 语言源文件。

3 使用 GCC 编译

回到终端,输入以下命令来编译 hello.c

gcc hello.c

GCC 会进行编译,如果代码没有语法错误,它不会显示任何信息,并生成一个默认的可执行文件,在 Linux 下,这个默认文件名通常是 a.out

4 运行你的程序

在终端中输入以下命令来运行刚刚生成的 a.out

./a.out

注意: 是告诉终端在当前目录下寻找这个可执行文件,如果不加 ,系统可能会在系统路径中寻找同名文件。

你应该会在终端看到输出:

Hello, World!

恭喜你!你已经成功地在 Linux 下编写、编译并运行了你的第一个 C 程序!


深入 GCC:编译命令详解

GCC 非常强大,通过不同的选项可以控制编译过程。

  • gcc -o: 指定输出文件的名称。

    # 将 hello.c 编译,并生成名为 my_program 的可执行文件
    gcc hello.c -o my_program
    # 运行
    ./my_program

    这是一个非常好的习惯,可以避免生成默认的 a.out

  • gcc -c: 只编译,不链接,生成目标文件(.o 文件)。

    # 只编译 hello.c,生成 hello.o
    gcc -c hello.c

    这在大型项目中非常有用,可以分开编译各个源文件。

  • gcc -g: 生成调试信息。使用 GDB 调试时必须加此选项!

    gcc -g hello.c -o my_program
  • gcc -Wall: 显示所有警告(Warnings)。强烈推荐始终使用此选项! 警告不是错误,但它们可能预示着潜在的问题。

    gcc -Wall hello.c -o my_program
  • gcc -O2: 进行代码优化,使程序运行得更快。

    gcc -O2 -Wall hello.c -o my_program

最佳实践组合:

gcc -Wall -g -o my_program hello.c

这个命令会开启所有警告,并包含调试信息,然后编译 hello.cmy_program


核心概念:C 语言基础

让我们回头看看 hello.c 的代码,理解每一部分的意思。

#include <stdio.h>  // 1. 预处理指令
int main() {       // 2. 主函数
    printf("Hello, World!\n"); // 3. 函数调用
    return 0;      // 4. 返回值
}
  1. #include <stdio.h>: 这是一条预处理指令stdio.h 是 "Standard Input/Output Header" 的缩写,它包含了像 printf 这样用于输入和输出的函数的声明。#include 的作用是把这个头文件的内容插入到当前文件中。
  2. int main(): 这是程序的入口函数,当你的程序运行时,操作系统会从这里开始执行。int 表示这个函数执行完毕后会返回一个整数值。return 0; 通常表示程序成功执行完毕。
  3. printf(...): 这是 C 语言标准库中的一个函数,用于在标准输出(通常是你的终端屏幕)上打印格式化的字符串。
  4. \n: 这是一个转义字符,代表一个“换行符”,它会让光标移动到下一行的开头。
  5. 变量与数据类型:
    int age = 25;
    float price = 19.99;
    char grade = 'A';
    • int: 用于存储整数。
    • float: 用于存储单精度浮点数(带小数的数字)。
    • char: 用于存储单个字符。
  6. 注释: 注释是给程序员看的,编译器会忽略它们。
    • // 单行注释
    • /* 多行注释 */

动手实践:一个简单的计算器

让我们写一个更有趣的程序:让用户输入两个数字,然后计算它们的和。

1 需求分析

  1. 提示用户输入第一个数字。
  2. 读取用户输入的数字。
  3. 提示用户输入第二个数字。
  4. 读取用户输入的数字。
  5. 计算两个数字的和。
  6. 打印计算结果。

2 代码实现

创建一个新文件 calculator.c

nano calculator.c

输入以下代码:

#include <stdio.h>
int main() {
    // 声明三个整型变量
    int num1, num2, sum;
    // 提示用户输入
    printf("请输入第一个整数: ");
    // 读取用户输入并存储到 num1 中
    scanf("%d", &num1);
    printf("请输入第二个整数: ");
    // 读取用户输入并存储到 num2 中
    scanf("%d", &num2);
    // 计算和
    sum = num1 + num2;
    // 打印结果
    printf("两个数的和是: %d\n", sum);
    return 0;
}

新概念:

  • scanf: 和 printf 相反,scanf 用于从标准输入(键盘)读取数据。
  • %d: scanfprintf 中用于格式化整数(int)的占位符。
  • &num1: &取地址运算符scanf 需要知道要把读取到的数据存放到哪个变量的内存地址中,所以这里我们传入的是 num1 的地址。

3 编译与运行

gcc -Wall -o calculator calculator.c
./calculator

程序运行后,会提示你输入数字,输入后按回车,即可看到结果。


调试入门:使用 GDB 查找错误

程序总会出错,当程序行为不符合预期时,调试器就是你的好朋友。

1 故意制造一个错误

修改 calculator.c,在计算和时故意写错:

// sum = num1 + num2;  // 注释掉正确的
sum = num1 - num2;     // 故意写成减法

现在程序计算的是差,而不是和。

2 编译带调试信息的程序

必须用 -g 选项编译,GDB 才能工作。

gcc -g -Wall -o calculator calculator.c

3 启动 GDB

gdb ./calculator

你会进入 GDB 的交互式界面,类似这样:

GNU gdb (Ubuntu 9.2-0ubuntu1~20.04.1) ...
...
(gdb)

4 常用 GDB 命令

(gdb) 提示符下输入以下命令:

  • run (或 r): 运行程序,程序会暂停在 main 函数的开头。
  • break main (或 b main): 在 main 函数的开头设置一个断点,程序运行到断点处会暂停。
  • next (或 n): 执行下一行代码(不进入函数内部)。
  • print num1 (或 p num1): 打印变量 num1 的当前值。
  • continue (或 c): 继续运行程序,直到下一个断点或程序结束。
  • quit (或 q): 退出 GDB。

一个典型的调试会话:

(gdb) break main
Breakpoint 1 at 0x55555555512d: file calculator.c, line 7.
(gdb) run
Starting program: /path/to/your/calculator 
Breakpoint 1, main () at calculator.c:7
7       printf("请输入第一个整数: ");
(gdb) print num1
$1 = 0  // 变量 num1 的初始值
(gdb) next
8       scanf("%d", &num1);
(gdb)
请输入第一个整数: 10
(gdb) print num1
$2 = 10 // 输入后,num1 的值变成了 10
(gdb) continue
Continuing.
请输入第二个整数: 20
两个数的和是: -10  <-- 看到错误结果了!
[Inferior 1 (process 12345) exited with code 040]
(gdb) quit

通过这种方式,你可以一步步跟踪程序的执行流程和变量值,从而找到逻辑错误。


项目构建入门:Makefile

当你的项目只有一个文件时,直接用 gcc 很方便,但当项目有几十个甚至上百个源文件时,手动输入编译命令就会变得非常繁琐和容易出错。Makefile 就是为了解决这个问题而生的。

1 为什么需要 Makefile?

Makefile 是一个包含构建规则(如何编译、链接)的文本文件。make 程序会读取这个文件,并根据规则自动完成整个项目的编译。

2 一个简单的 Makefile 示例

假设你的项目有两个文件:main.cutils.c

  • main.c:
    #include "utils.h"
    int main() {
        print_hello();
        return 0;
    }
  • utils.c:
    #include <stdio.h>
    #include "utils.h"
    void print_hello() {
        printf("Hello from a Makefile project!\n");
    }
  • utils.h (头文件):
    #ifndef UTILS_H
    #define UTILS_H
    void print_hello();
    #endif

在同一目录下创建一个名为 Makefile 的文件(注意:没有后缀名,首字母通常大写):

# 定义变量
CC = gcc
CFLAGS = -Wall -g
TARGET = my_program
SRCS = main.c utils.c
OBJS = $(SRCS:.c=.o)
# 默认目标,当只输入 make 时执行
all: $(TARGET)
# 链接规则:如何从 .o 文件生成最终的可执行文件
$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) -o $@ $^
# 编译规则:如何从 .c 文件生成 .o 文件
%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@
# 清理规则,用于删除编译生成的文件
clean:
    rm -f $(OBJS) $(TARGET)
# .PHONY 表示 clean 是一个伪目标,它不代表一个实际文件
.PHONY: all clean

3 使用 make 命令

你只需要在终端输入:

make

make 程序会自动读取 Makefile 并执行相应的编译和链接命令,它会智能地只重新编译那些被修改过的文件。

如果你想清理所有编译产物,只需输入:

make clean

学习路径与资源推荐

1 进阶学习

  • 指针: C 语言的灵魂和难点,必须深入理解。
  • 内存管理: 学习 malloc, free, calloc, realloc 等动态内存分配函数。
  • 文件 I/O: 学习使用 fopen, fclose, fread, fwrite 等函数操作文件。
  • 结构体与联合体: 学习如何将不同类型的数据组合在一起。
  • 多线程: 使用 pthread 库编写多线程程序。
  • 系统调用: 学习 open, read, write, fork, exec 等,理解 Linux 内核为应用程序提供的接口。

2 推荐书籍

  • 《C Primer Plus》: 经典入门书籍,内容详尽,适合零基础。
  • 《C程序设计语言(The C Programming Language, K&R)》: C 语言之父写的书,简短精炼,适合有一定基础后阅读。
  • 《C陷阱与缺陷》: 帮你理解 C 语言中容易出错的地方。

3 在线资源

  • cplusplus.com: C++ 标准库参考,但对 C 语言也很有用,可以查函数用法。
  • GeeksforGeeks: 提供大量 C 语言教程和面试题。
  • Stack Overflow: 遇到问题时,搜索这里,很可能已经有人问过并得到了解答。
  • Linux Man Pages: 终端输入 man 3 printf 可以查看 printf 函数的详细手册。

祝你学习愉快,在 Linux 的世界里探索 C 语言的强大魅力!

-- 展开阅读全文 --
头像
嵌入式Linux C编程如何高效实践?
« 上一篇 2025-12-11
云织梦2025 PHP教程有何新亮点?
下一篇 » 2025-12-11
取消
微信二维码
支付宝二维码

目录[+]