1.C语言教程:历史、特点、版本与入门示例
目录
- 1.历史
- 2.特点
- 3.版本
- 4.编译
- 5.Hello World 示例
1.历史
本篇原文为:C语言教程:历史、特点、版本与入门示例。
更多C++进阶、rust、python、逆向等等教程,可去此站查看:酷程网
C 语言的诞生源于 Unix 系统的开发需求。
1969 年,美国贝尔实验室的肯·汤普森(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)共同开发了 Unix 操作系统。
但由于 Unix 是用汇编语言编写的,不同类型的计算机所使用的汇编语言并不完全相同,这使得它无法在其他计算机上运行。
因此他们决定用一种高级语言重写系统,但当时的高级语言无法满足他们的需求,因此汤普森基于 BCPL 语言创造了 B 语言。
1972 年,丹尼斯·里奇和布莱恩·柯林汉(Brian Kernighan)在 B 语言的基础上重新设计了一种新语言,这便是 C 语言。1973 年,整个 Unix 系统被成功重写为 C 语言,随后,这种语言迅速传播并广泛应用于各类操作系统和系统软件的开发。
1988 年,美国国家标准协会(ANSI)正式将 C 语言标准化,这标志着 C 语言的稳定与规范化。
如今,C 语言依然是最为广泛使用和流行的系统编程语言之一,Unix 和 Linux 系统仍然依赖 C 语言进行开发。
2.特点
C 语言的持久生命力与广泛应用主要源于其显著的特点。
(1)低级语言
C 语言能直接操作硬件,进行内存管理,并与操作系统进行对话,因此被认为是一种接近底层的低级语言。这使其非常适合于编写需要与硬件交互或具有极高性能要求的程序。
(2)可移植性
C 语言的初衷是将 Unix 系统移植到其他计算机架构,这使得它在设计上极为注重可移植性。C 程序可以相对轻松地在各种硬件架构和操作系统之间移植。
不仅如此,C 语言还是嵌入式系统的首选语言,许多汽车、照相机及家电等设备的底层系统均使用 C 语言,这也得益于其良好的可移植性。
(3)简单性
C 语言的语法相对简洁,语法规则不多,几乎没有语法糖。一般来说,如果有两个语法能够完成类似的功能,C 语言只会提供其中一种,这大大降低了语言的复杂性。
同时,C 语言不提供复杂的数据结构,例如没有“类”(class),程序员需要自己构建复杂数据结构。
(4)灵活性
C 语言对程序员几乎没有限制,假设程序员知道自己在做什么,因此不限制潜在的危险操作,后果由程序员自负。
C 语言的哲学是“信任程序员,不要妨碍他们”。例如,C 语言允许程序员自行管理内存,而不提供内存自动清理的功能,也没有类型检查、数组负索引检查和指针位置检查等保护措施。
这种自由虽看似危险,但却为高级程序员提供了更大的编程灵活性。然而,这也使得 C 语言的调试变得更加困难。
上述特点使得 C 语言能编写出性能卓越、充分发挥硬件潜力的程序。此外,C 语言的编译器实现难度相对较低,但同时也意味着代码易出错,一般程序员不易编写出高质量代码。
值得注意的是,许多现代流行编程语言如 C++、Java、C# 和 JavaScript 等,都是以 C 语言为基础的,因此掌握 C 语言有助于加深对这些语言的理解。
3.版本
C 语言历史上经历了多个版本的发展。
(1)K&R C
K&R C
指的是 C 语言的原始版本。1978 年,C 语言的发明者丹尼斯·里奇(Dennis Ritchie)和布莱恩·柯林汉(Brian Kernighan)共同撰写了著名教材《C 编程语言》(The C Programming Language)。由于当时 C 语言尚无正式的语法标准,这本书便成为了公认的标准,以两位作者的姓氏首字母命名为“K&R C”。
(2)ANSI C(又称 C89 或 C90)
原始版本的 C 语言相对简单,对许多情况的描述模糊,加之语法仍在快速发展,因此对标准化的呼声日益高涨。1989 年,美国国家标准协会(ANSI)制定了一套 C 语言标准,1990 年国际标准化组织(ISO)通过了这一标准,称为“ANSI C”,也可以根据发布年份称为“C89”或“C90”。
(3)C95
1995 年,ANSI 对 C89 标准进行了补充,增加了对多字节字符和宽字符的支持,这个版本被称为 C95。
(4)C99
C 语言标准的首次重大修订发生在 1999 年,新增了许多语言特性,如双斜杠(//
)注释语法。这个版本被称为 C99,目前是使用最广泛的 C 语言版本。
(5)C11
2011 年,标准化组织再次对 C 语言进行修订,增加了 Unicode 和多线程支持,这个版本称为 C11,同样使用广泛。
(6)C17
C11 标准于 2017 年进行了修补,尽管发布在 2018 年,此版本只解决了 C11 的一些缺陷,没有引入新功能,被称为 C17。
(7)C23
C标准化组织在 2024 年通过C23版本,新增更多功能:C23 (C语言标准)
4.编译
C 语言是一种编译型语言,源代码存储为文本文件,无法直接执行。必须通过编译器生成二进制可执行文件后才能运行。
编译器将代码从文本翻译为二进制指令的过程称为编译阶段,亦称“编译时”,与运行阶段(或“运行时”)相区分。
目前,最常用的 C 语言编译器是自由软件基金会推出的 GCC 编译器,用户可以免费使用,但其主要用于linux系统。
像我们平时大多数人使用的都是WIndows系统,想要开发C语言程序,最佳方式是按照Visual Studio,其内已经内置了C++语言编译器,由于C++完全兼容C语言,因此可以直接使用。
使用方式可以参考文章:初识C++
如果你就是想要在windows系统上使用linux系统编译环境,那么最佳方案是安装wsl使用:Linux系统入门。
此外,网上也提供了多种在线编译器,方便用户直接在网页上模拟运行 C 代码并查看结果,以下是两个示例:
- CodingGround
- OnlineGDB
- C 在线工具
5.Hello World 示例
C 语言的源代码文件通常以 .c
结尾。下面是一个简单的 C 程序 hello.c
,它是一个普通的文本文件,任何文本编辑器都可以用来编写,比如linux下的vim编辑器,window下的记事本。
#include <stdio.h>
int main(void)
{
printf("Hello World\n");
return 0;
}
上述程序的唯一作用是在屏幕上显示“Hello World”。
这里不对代码的含义进行解释,仅作为一个示例,让大家了解如何编译和运行 C 代码。
如果你已经安装好了linux系统的GCC 编译器,可以打开命令行并执行以下命令:
gcc hello.c
该命令使用 gcc
编译器将源文件 hello.c
编译成二进制代码。
运行此命令后,默认会在当前目录下生成一个编译产物文件 a.out
(在 Windows 平台上为 a.exe
)。执行该文件即可在屏幕上输出 Hello World
。
GCC 的 -o
参数(output 的缩写)可以用于指定编译产物的文件名。
gcc -o hello hello.c
此命令中的 -o hello
指定了编译产物的文件名为 hello
(取代默认的 a.out
)。编译后生成的可执行文件名为 hello
,执行该文件也会得到相同的结果。
GCC 的 -std=
参数(standard 的缩写)可以指定编译时使用的 C 语言标准。
gcc -std=c99 hello.c
此命令指定按照 C99 标准进行编译。
注意,-std
后面需要用 =
连接参数,而不是像 -o
那样用空格,并且 =
前后也不能有多余的空格。
但如果你仅仅只想学习一下C语言的语法,那么不必执行前述这些东西,直接去在线编译网站即可:
但如果可以,我还是推荐你使用visual studio工具进行学习,因为它拥有智能提示、补全功能。
或者安装使用wsl,提前适应linux系统开发技巧。