# 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 编码的字符。

# 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 系统。