C 语言(C Programming Language)是一种通用的、面向过程的计算机编程语言,由 Dennis Ritchie 于 1972 年在贝尔实验室开发,用于重新实现 Unix 操作系统。
C 语言的核心理念是 信任程序员——它给予程序员最大的控制权和灵活性,几乎不进行运行时安全检查。这种设计让 C 语言成为 系统级编程 的黄金标准。
C 语言的前身是 B 语言(由 Ken Thompson 开发),而 B 语言的前身是 BCPL。Dennis Ritchie 在 B 语言的基础上增加了数据类型和结构体,创建了 C 语言。最初的设计目标是用于重写 Unix 操作系统,使其具备可移植性。
stdint.h、restrict 关键字<threads.h>)、泛型选择、原子操作nullptr、bool 正式化、constexpr 等现代特性int main(void) 或 int main(int argc, char *argv[]); 表示语句结束{ } 包裹// 单行注释、/* */ 多行注释#include、#define、#ifdef 等,在编译前处理int:整数(通常是 4 字节)char:字符(1 字节)float:单精度浮点数(4 字节)double:双精度浮点数(8 字节)void:无类型(用于指针和函数返回值)short、long、signed、unsignedstdint.h 提供精确宽度类型(int32_t、uint64_t 等)int arr[10];struct Person { char name[50]; int age; };union Data { int i; float f; char str[20]; };enum Color { RED, GREEN, BLUE };int *ptr; —— C 语言最核心、最强大的特性int *p; 声明一个指向 int 的指针&variable 获取变量的地址*p 访问指针指向的值NULL(C23 引入 nullptr)int (*func)(int, int); 可以指向函数C 语言要求程序员 手动管理内存,这是 C 语言高性能的根源,也是 Bug 的主要来源。
malloc(size_t size):分配内存,不初始化calloc(size_t num, size_t size):分配并初始化为 0realloc(void *ptr, size_t new_size):重新分配内存free(void *ptr):释放内存// 动态分配内存示例
int *arr = (int *)malloc(10 * sizeof(int));
if (arr == NULL) {
// 处理内存分配失败
return 1;
}
// 使用 arr...
free(arr); // 必须手动释放!
if、else、else if、switchfor、while、do-whilebreak、continue、goto、returnint add(int a, int b);int add(int a, int b) { return a + b; }<stdarg.h> 实现inline 关键字(C99),建议编译器内联展开C 语言的标准库虽然不大,但非常精悍:
printf、scanf、fopen、fread)malloc、free、atoi、rand)strcpy、strlen、strcmp)sin、cos、sqrt)C 语言编译为机器码直接运行,没有虚拟机、没有解释器、没有垃圾回收。C 语言编写的程序可以充分发挥硬件的全部性能。
C 语言的指针和位运算让程序员可以直接操作内存地址、寄存器、I/O 端口,这是嵌入式开发和驱动开发的核心能力。
C 语言的标准库在不同平台上的实现高度一致,只要代码遵循 ANSI C 标准,就可以在各种平台(Windows、Linux、macOS、嵌入式)上编译运行。
C 语言只有 32 个关键字,语法简洁。但正是这种简洁,让 C 语言成为"学习计算机科学的最佳语言"——理解 C 语言就是理解计算机的工作方式。
几乎所有现代编程语言的运行时和核心库都是用 C 编写的——Python(CPython)、Ruby(MRI)、PHP(Zend Engine)、Java(JVM 部分)、Go(早期版本)等。
char str[10]; strcpy(str, "太长字符串");free()free()int x; printf("%d", x);fgets() 替代 gets()(gets 已被 C11 移除)strncpy()、snprintf() 替代 strcpy()、sprintf()NULL-Wall -Wextra -Werror -fsanitize=address#include、#define 等指令# 典型编译命令
gcc -Wall -O2 -o program main.c utils.c -lm
<threads.h>)<stdatomic.h>)_Generic)nullptr:真正的空指针常量bool 正式成为关键字constexpr:编译期常量表达式typeof 和 typeof_unqual#embed:直接嵌入二进制数据stdint.h 精确宽度类型(int32_t、uint64_t)bool(来自 <stdbool.h>)替代 int 作为布尔值const 修饰不修改的参数static inline 定义头文件中的小型函数restrict 帮助编译器优化数据类型、变量、运算符、控制结构、函数、数组、字符串
指针、动态内存管理、结构体、联合体、文件 I/O
编译器原理、内存模型、链接与加载、标准库源码阅读
实现一个简单的 Shell、Web 服务器、或数据结构库
C 语言是计算机科学的普通话。
它不像 Python 那样容易上手,也不像 JavaScript 那样有华丽的 Web 生态。但 C 语言教会你 计算机真正是如何工作的——内存、指针、栈、堆、链接、加载。
学习 C 语言可能不会让你立刻找到一份 Web 开发工作,但它会让你成为一个 更好的程序员。无论你最终选择哪条技术路线,C 语言的知识都会让你走得更远、更深。
"那些没有 C 语言基础的程序员,就像是不知道汽车引擎原理的司机。" 🚗