# C
# 特点
编译型语言
高级语言
- 与汇编语言相比,C 语言属于高级语言,方便很多。
- 与 Java、Python 等高级语言相比,C 语言的内置功能较少,很多功能都需要程序员自己实现,因此编程的工作量大。
- C 语言支持定义函数,但不支持定义类,因此编写大型程序时比较麻烦。
- C 语言的 struct 结构体,可以勉强当作 class 使用,进行面向对象编程,但比 C++ 中真正的 class 麻烦很多。
- C 语言的优势是,更接近汇编语言,擅长处理二进制数据,能对内存开销精打细算。因此 C 语言常用于开发一些底层软件,比如硬件驱动、操作系统。
结构化编程
- 20 世纪早期的一些编程语言,只能按顺序从上到下执行代码。而 C 语言支持顺序、选择、循环、递归等流程结构,比如 if 语句属于选择结构,for 语句属于循环结构。
接近底层
- C 语言能实现汇编语言的部分功能,比如位运算、直接访问物理地址,因此 C 语言可以执行一些底层操作,使得程序的运行效率接近汇编语言。
- 但执行底层操作时,编程的工作量更大、更复杂。
# 相关历史
# C
1978 年,Brian Kernighan 和 Dennis Ritchie 出版书籍《The C Programming Language》,将 C 语言介绍给全世界。
- 这是第一本介绍 C 语言编程的书籍,书中的第一个示例程序是显示 "hello world" ,成为了众多编程语言教程的传统。
- 此时 C 语言还没有正式的语法标准,人们将这本书描述的 C 语言,称为 "K&R C" 。
1989 年,ANSI(美国国家标准学会)制定了世界上第一个 C 语言标准,称为 ANSI C 。因为所在年份,又被称为 C89 。
1990 年,ISO(国际标准化组织)采纳了 C89 ,作为国际标准,称为 ISO C 。因为所在年份,又被称为 C90 。
1999 年,ISO 发布了新的 C 语言标准。因为所在年份,又被称为 C99 。
- C99 在 C89 的基础上,做了少量改进,基本向下兼容 C89 。
- C99 的主要变化:
- 以前,只支持
/* comment */
格式的多行注释。现在,从 C++ 借鉴了// comment
格式的单行注释。 - 支持在 for 语句的第一个表达式中,声明变量的数据类型。例如
for(int x=0; ...; ...)
- 从 C++ 借鉴了关键字 inline ,用于定义内联函数。
- 增加了头文件
<complex.h>
,定义了 complex 数据类型。 - 增加了头文件
<stdbool.h>
,定义了 bool 数据类型,取值可以为 true 或 false ,相当于整数 1 或 0 。例:#include <stdbool.h> bool x = true;
- 增加了头文件
<stdint.h>
,定义了 int8_t、int16_t、int32_t、int64_t 等整型,以及 uint8_t、uint16_t 等无符号整型。它们在 32 位上的容量,与 64 位 CPU 上的容量相同,因此便于移植程序。
- 以前,只支持
2011 年,ISO 发布了新的 C 语言标准。因为所在年份,又被称为 C11 。
- C11 的主要变化:
- 在
<stdio.h>
中删除了gets()
函数,因为容易发生内存越界访问。请改用gets_s()
、scanf()
等函数。 - 增加了头文件
<threads.h>
,用于创建多线程。 - 增加了头文件
<uchar.h>
,用于处理 Unicode 字符。它定义了 char16_t、char32_t 数据类型,用于存储 UTF-16、UTF-32 编码的字符。
- 在
- C11 的主要变化:
# C#
1964 年,Dartmouth 学院的 John Kemeny 和 Thomas Kurtz ,基于 Fortran 发明了一个高级编程语言 BASIC 。它的语法简单,适合让学生们学习编程。
1991 年,微软公司基于 BASIC 语言,发明了一个新语言 Visual Basic 。
- 优点:可以通过 GUI 界面进行可视化的编程,入门门槛低。
- 缺点:GUI 界面尚不成熟,功能少。
2000 年,微软公司发布了一个软件开发框架 .NET Framework ,包含一些代码库、命令行工具。
- 以前,用户在 Windows 电脑上开发软件时,需要调用 Windows 系统的底层 API 。
- 现在,用户可以调用 .NET Framework 的 API ,更方便地开发 Windows 软件。
- 不过 .NET Framework 是闭源软件,而且只能在 Windows 系统上运行。
- 微软公司为 .NET Framework 专门设计了一个编程语言,称为 C Sharp ,简称为 C# 。
- 起初,人们将 C# 视作 Java 的仿品,因为两者语法相似。但多年后,两者的差异越来越大。
- 基于 .NET Framework 开发的程序,需要先编译为 CIL 格式的中间代码,然后交给 CLR 运行时,转换成机器代码并执行。这一流程像 JVM 。
- 微软公司提供了 ASP.NET ,它是一个 Web 开发框架,基于 .NET Framework 工作。
- 微软公司提供了 NuGet ,作为 .NET 平台的包管理工具。
2014 年,微软公司发布了 .NET core ,作为 .NET Framework 的升级版,代码开源,并且兼容 Windows、Linux、MacOS 系统。