C语言 是一门通用、过程式的计算机编程语言,诞生于1972年,由贝尔实验室的丹尼斯·里奇(Dennis Ritchie)设计。 它既具有高级语言的简洁性,又保留了汇编语言对硬件的操作能力,至今仍是系统编程、嵌入式开发、操作系统内核等领域最核心的语言之一。 无论你是编程初学者,还是希望深入计算机底层原理的开发者,C语言都是绕不开的基石。
C语言的前身是 B语言(Ken Thompson 设计),在1972年左右,丹尼斯·里奇在B语言基础上增加了数据类型、结构体等特性, 并设计了一套更强大的编译器,最终形成了C语言。最初C语言被用于重写UNIX操作系统,使得UNIX具备了史无前例的可移植性。 随后C语言迅速流行,成为系统级开发的首选。
1983年,美国国家标准协会(ANSI)成立了X3J11委员会,开始对C语言进行标准化,并于1989年发布了第一个官方标准 ANSI C(C89)。 1990年国际标准化组织(ISO)采纳该标准,称为C90。此后C语言不断发展,陆续推出了 C99(增加内联函数、变长数组等)、 C11(增加多线程支持、泛型等)以及 C17/C18(缺陷修复与功能澄清)等版本。 目前最新的标准是C23(2023年发布),在类型推断、内存模型等方面做了进一步改进。
C语言经过数十年发展,形成了多个重要标准版本,每个版本都增加了新特性并修复了缺陷。作为初学者,建议从C89/C90开始学习,再逐步了解现代C特性。
| 标准 | 发布年份 | 主要新特性 |
|---|---|---|
| K&R C | 1978 | 非官方事实标准(《C程序设计语言》第一版) |
| C89 / C90 | 1989 / 1990 | 首个官方标准,确立了函数原型、void类型、预处理器等核心语法 |
| C99 | 1999 | 引入内联函数、变长数组、stdint.h、单行注释//、restrict关键字等 |
| C11 | 2011 | 增加多线程支持(<threads.h>)、泛型选择、原子操作、匿名结构体/联合体 |
| C17 / C18 | 2018 | 修复C11缺陷,无重大新功能,属于技术勘误版本 |
| C23 | 2023 | 引入nullptr、constexpr、auto类型推断(类似C++),进一步现代化 |
按照编程界的传统,我们从一个最简单的“Hello, World!”程序开始。这个程序会在屏幕上打印一行文字,帮助你快速感受C语言的编写与运行过程。
#include <stdio.h>
int main() {
// 输出 Hello, World! 到控制台
printf("Hello, World!\n");
return 0;
}
#include <stdio.h>:预处理指令,引入标准输入输出库,printf函数便来自该库。int main():程序的入口函数,操作系统执行程序时首先调用main函数。int表示返回值类型为整数。{ ... }:函数体,所有逻辑包含在花括号内。printf("Hello, World!\n");:调用库函数,在终端打印字符串,\n表示换行。return 0;:返回0给操作系统,通常表示程序正常结束。;结尾,main函数可以有参数(int argc, char *argv[]),也可以无参数。初学者建议先记住这种固定格式。
C语言是编译型语言,源代码需要经过编译器转换成可执行文件才能运行。最常用的编译器是 GCC(GNU Compiler Collection)。
# 编译 hello.c 生成可执行文件 hello
gcc hello.c -o hello
# 运行程序
./hello
如果一切正常,终端会输出:
Hello, World!
在Windows环境下,可以使用MinGW或Visual Studio的cl.exe编译器,或者借助IDE(如Code::Blocks, Dev-C++)一键编译运行。
Windows、Linux、macOS内核核心部分使用C语言编写,UNIX更是C语言的“试验田”。
单片机、智能家电、汽车电子、工业控制等领域,C语言占据绝对主导地位。
MySQL、PostgreSQL、Redis等主流数据库核心均采用C/C++编写。
Unreal Engine、Unity底层、图形API(OpenGL/DirectX)与C语言密不可分。
本节简要介绍了C语言的诞生背景、核心特性、标准演变以及第一个程序。从下一章开始,我们将正式搭建C语言开发环境,编写并运行更多有趣的程序。 千里之行始于足下,C语言的大门已经为你敞开。