第一章 C语言简介
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 语言建议
对于新手,建议按这个顺序学习:
- 变量与数据类型
- 输入输出
- 运算符
- if 判断
- 循环
- 数组
- 函数
- 指针
- 结构体
- 文件操作
- 动态内存
- 数据结构
其中,"指针" 是 C 语言最核心、也是最重要的部分。学会指针后,很多底层原理都会真正理解。
总结
C 语言虽然已经诞生几十年,但依然是最重要的编程语言之一。
它的特点是:简单、高效、强大、接近底层
如果你想:学操作系统、学底层原理、学嵌入式、学高性能开发、深入理解计算机,那么 C 语言几乎是必学的一门语言。