C 语言简介 历史 C 语言最初是作为 Unix 系统的开发工具而发明的。 1969年,美国贝尔实验室的肯·汤普森(Ken Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发了 Unix 操作系统。Unix 是用汇编语言写的,无法移植到其他计算机,他们决定使用高级语言重写。但是,当时的高级语言无法满足他们的要求,汤普森就在 BCPL 语言的基础上发明了 B 语言。 1972年,丹尼斯·里奇和布莱恩·柯林汉(Brian Kernighan)又在 B 语言的基础上重新设计了一种新语言,这种新语言取代了 B 语言,所以称为 C 语言。 1973年,整个 Unix 系统都使用 C 语言重写。此后,这种语言开始快速流传,广泛用于各种操作系统和系统软件的开发。

Hugo中文文档 Hugo是由Go语言实现的静态网站生成器。简单、易用、高效、易扩展、快速部署。 快速开始 安装Hugo 1. 二进制安装(推荐:简单、快速) 到 Hugo Releases 下载对应的操作系统版本的Hugo二进制文件(hugo或者hugo.exe)

数组 简介 数组是一组相同类型的值,按照顺序储存在一起。数组通过变量名后加方括号表示,方括号里面是数组的成员数量。

命令行环境 命令行参数 C 语言程序可以从命令行接收参数。

Enum 类型 如果一种数据类型的取值只有少数几种可能,并且每种取值都有自己的含义,为了提高代码的可读性,可以将它们定义为 Enum 类型,中文名为枚举。

文件操作 本章介绍 C 语言如何操作文件。

流程控制 C 语言的程序是顺序执行,即先执行前面的语句,再执行后面的语句。开发者如果想要控制程序执行的流程,就必须使用流程控制的语法结构,主要是条件执行和循环执行。

函数 简介 函数是一段可以重复执行的代码。它可以接受不同的参数,完成对应的操作。下面的例子就是一个函数。

I/O 函数 C 语言提供了一些函数,用于与外部设备通信,称为输入输出函数,简称 I/O 函数。输入(import)指的是获取外部数据,输出(export)指的是向外部传递数据。

assert.h头文件定义了宏assert(),用于在运行时确保程序符合指定条件,如果不符合,就报错终止运行。这个宏常常被称为“断言”。

ctype.h

ctype.h ctype.h头文件定义了一系列字符处理函数的原型。

errno.h

errno.h errno 变量 errno.h声明了一个 int 类型的 errno 变量,用来存储错误码(正整数)。

float.h

float.h float.h定义了浮点数类型 float、double、long double 的一些宏,规定了这些类型的范围和精度。

inttypes.h

inttypes.h C 语言还在头文件 inttypes.h 里面,为 stdint.h 定义的四类整数类型,提供了printf()和scanf()的占位符。

iso646.h

iso646.h iso646.h头文件指定了一些常见运算符的替代拼写。比如,它用关键字and代替逻辑运算符&&。

limits.h

limits.h limits.h提供了用来定义各种整数类型(包括字符类型)取值范围的宏。

locale.h

locale.h 简介 locale.h是程序的本地化设置,主要影响以下的行为。

math.h math.h头文件提供了很多数学函数。

signal.h 简介 signal.h提供了信号(即异常情况)的处理工具。所谓“信号”(signal),可以理解成系统与程序之间的短消息,主要用来表示运行时错误,或者发生了异常事件。

stdarg.h stdarg.h定义于函数的可变参数相关的一些方法。

stdbool.h stdbool.h头文件定义了4个宏。

stddef.h stddef.h提供了常用类型和宏的定义,但没有声明任何函数。

stdint.h 固定宽度的整数类型 stdint.h 定义了一些固定宽度的整数类型别名,主要有下面三类。

stdio.h

stdio.h stdio.h是 C 语言的标准 I/O 库,用于读取和写入文件,也用于控制台的输入和输出。

string.h

string.h string.h主要定义了字符串处理函数和内存操作函数。

time.h time_t time_t 是一个表示时间的类型别名,可以视为国际标准时 UTC。它可能是浮点数,也可能是整数,Unix 系统一般是整数。

wchar.h 宽字符使用两个或四个字节表示一个字符,导致 C 语言常规的字符处理函数都会失效。wchar.h 定义了许多宽字符专用的处理函数。

wctype.h wctype.h 提供 ctype.h 里面函数的宽字符版本。

memory

C 语言的内存管理 简介 C 语言的内存管理,分成两部分。一部分是系统管理的,另一部分是用户手动管理的。

多字节字符 本章介绍 C 语言如何处理非英语字符。

多文件项目 简介 一个软件项目往往包含多个源码文件,编译时需要将这些文件一起编译,生成一个可执行文件。

运算符 C 语言的运算符非常多,一共有 50 多种,可以分成若干类。

指针

指针 指针是 C 语言最重要的概念之一,也是最难理解的概念之一。

预处理器(Preprocessor) 简介 C 语言编译器在编译程序之前,会先使用预处理器(preprocessor)处理代码。

变量说明符 C 语言允许声明变量的时候,加上一些特定的说明符(specifier),为编译器提供变量行为的额外信息。它的主要作用是帮助编译器优化代码,有时会对程序行为产生影响。

字符串

字符串 简介 C 语言没有单独的字符串类型,字符串被当作字符数组,即char类型的数组。比如,字符串“Hello”是当作数组{'H', 'e', 'l', 'l', 'o'}处理的。

struct 结构 简介 C 语言内置的数据类型,除了最基本的几种原始类型,只有数组属于复合类型,可以同时包含多个值,但是只能包含相同类型的数据,实际使用中并不够用。

C 语言基本语法 语句 C 语言的代码由一行行语句(statement)组成。语句就是程序执行的一个操作命令。C 语言规定,语句必须使用分号结尾,除非有明确规定可以不写分号。

typedef 命令 简介 typedef命令用来为某个类型起别名。

数据类型 C 语言的每一种数据,都是有类型(type)的,编译器必须知道数据的类型,才能操作数据。所谓“类型”,就是相似的数据所拥有的共同特征,那么一旦知道某个值的数据类型,就能知道该值的特征和操作方式。 转义的写法,主要用来表示 ASCII 码定义的一些无法打印的控制字符,它们也属于字符类型的值。

Union 结构 有时需要一种数据结构,不同的场合表示不同的数据类型。比如,如果只用一种数据结构表示水果的“量”,这种结构就需要有时是整数(6个苹果),有时是浮点数(1.5公斤草莓)。

变量 变量(variable)可以理解成一块内存区域的名字。通过变量名,可以引用这块内存区域,获取里面存储的值。由于值可能发生变化,所以称为变量,否则就是常量了。