第一章 C语言简介

阅读时间:约 5 分钟

C 语言简介

C 语言是一种非常经典、非常重要的编程语言。它由 Dennis Ritchie 在 1972 年于 Bell Labs 开发,最初是为了编写 UNIX 操作系统。

很多现代编程语言都受到了 C 语言的影响,比如:

  • C++
  • Java
  • Go
  • Rust

可以说,学习 C 语言不仅是在学一门语言,更是在学习计算机底层工作的原理。

为什么很多人学习 C 语言?

因为 C 语言有几个非常大的优点:

1. 语法简单

C 的语法比较直接,没有太多复杂规则,非常适合学习编程基础。

例如:

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

虽然代码很短,但已经包含了程序最核心的结构。

2. 运行速度非常快

C 程序会先"编译"成机器代码再运行,所以执行效率非常高。

它的速度非常接近汇编语言,因此特别适合:

  • 操作系统
  • 游戏引擎
  • 数据库
  • 驱动程序
  • 嵌入式开发

这些对性能要求极高的领域。

3. 可以直接操作内存和硬件

C 语言允许程序员直接控制内存。

这意味着:

  • 能开发操作系统
  • 能写驱动程序
  • 能控制单片机
  • 能操作底层硬件

这也是很多高级语言做不到的事情。

4. 跨平台能力强

同一份 C 代码,稍微修改甚至不修改,就可以在:

  • Windows
  • Linux
  • macOS

等不同系统上运行。

C 语言到底有多重要?

很多著名的软件底层都是用 C 写的,例如:

  • Linux 内核
  • MySQL 数据库核心
  • CPython(Python 官方解释器)
  • GCC 编译器
  • Clang 编译器

很多互联网基础设施背后,其实都离不开 C 语言。

C 语言的发展历史(新手简单了解)

C 语言的来源

C 语言是在 B 语言基础上发展而来的。

B 语言由 Ken Thompson 设计。

后来 Dennis Ritchie 对它进行了改进,于是诞生了 C 语言。

K&R C

1978 年,Brian Kernighan 和 Dennis Ritchie 出版了一本非常经典的书:The C Programming Language

很多程序员直接把它称为:"C 语言圣经"

这一时期的 C 语言也被称为:K&R C

ANSI C(C89)

后来,美国国家标准协会(ANSI)制定了 C 语言标准。1989 年正式发布:

  • C89(也叫 ANSI C)— 这是第一个官方标准。

后续版本

之后 C 语言不断升级:

  • C99
  • C11
  • C17

每次更新都会加入一些更现代、更安全的新功能。

C 语言主要用来做什么?

C 语言主要适合"底层开发"和"高性能开发"。

操作系统

  • Linux
  • Windows 内核
  • macOS 内核

编译器和解释器

  • GCC
  • Clang
  • CPython

数据库

  • MySQL
  • SQLite
  • PostgreSQL

嵌入式开发

  • 单片机
  • 路由器
  • 智能设备
  • 工业控制设备

很多硬件开发都离不开 C。

第一个 C 程序

通常,C 源代码文件以 .c 结尾。

下面是一个最经典的 C 程序:

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

运行后会输出:

Hello World!

如何运行 C 程序?

通常使用 GCC 或 Clang 来编译程序。

例如:

gcc hello.c -o hello

运行程序:

./hello

C11 是什么?

C11 是 C 语言的重要升级版本,于 2011 年发布。它增加了很多现代功能,让 C 更安全、更强大。

C11 的重要新特性(新手版)

1. 原生支持多线程

以前 C 语言写多线程很麻烦。C11 新增 <threads.h>,可以更方便地进行多线程编程。

适合:高性能服务器、并发程序、后台任务处理

2. 原子操作(Atomic)

新增 <stdatomic.h>,用于线程安全。多个线程同时修改数据时,更不容易出错。

3. 泛型(_Generic)

C11 增加了 _Generic,它能根据变量类型自动选择代码。虽然不像 C++ 模板那么强,但已经非常实用了。

4. 删除危险的 gets()

以前很多初学者会这样输入:gets(str);,但 gets() 非常危险,容易造成缓冲区溢出、程序崩溃、安全漏洞。因此 C11 直接把它删除了。现在推荐使用 fgets(),更安全。

5. 静态断言

新增 _Static_assert(),它可以在"编译阶段"检查错误。

_Static_assert(sizeof(int) == 4, "int 必须是4字节");

如果条件不满足,编译会直接报错。

6. 匿名结构体

以前访问结构体需要很多层名字。C11 支持匿名结构体后,代码会更简洁。

学习 C 语言建议

对于新手,建议按这个顺序学习:

  1. 变量与数据类型
  2. 输入输出
  3. 运算符
  4. if 判断
  5. 循环
  6. 数组
  7. 函数
  8. 指针
  9. 结构体
  10. 文件操作
  11. 动态内存
  12. 数据结构

其中,"指针" 是 C 语言最核心、也是最重要的部分。学会指针后,很多底层原理都会真正理解。

总结

C 语言虽然已经诞生几十年,但依然是最重要的编程语言之一。

它的特点是:简单、高效、强大、接近底层

如果你想:学操作系统、学底层原理、学嵌入式、学高性能开发、深入理解计算机,那么 C 语言几乎是必学的一门语言。