文章目录
第1章初识C语言
1.6 语言标准
第一个ANSI/ISO C标准
美国国家标准协会(ANSI)于1983年组建了一个委员会(X3J11),开发了一套新标准,并于1989年正式公布。该标准(ANSI C)定义了C语言和C标准库。国际标准化组织于1990年采用了这套C标准(ISO C)。ISO C和ANSI C是完全相同的标准。ANSI/ISO标准的最终版本通常叫作C89(因为ANSI 于 1989 年批准该标准)或C90(因为ISO于1990年批准该标准)。另外,由于ANSI先公布C标准,因此业界人士通常使用 ANSI C。
C99标准
1994年,ANSI/ISO联合委员会(C9X委员会)开始修订C标准,最终发布了C99标准。其达成的新目标:
- 第1,支持国际化编程。例如提供多种方法处理国际字符集。
- 第2,弥补缺陷。对于C移至64位处理器时,添加标准。
- 第3,适应科学和工程项目中的关键数值计算,提高C的适应性。
C11标准
标准委员会在2007年承诺C标准的下一个版本是C1X,2011年终于发布了C11标准。出于对当前编程安全的担忧,不那么强调“信任程序员”目标了。同时并未很好地接受和支持C99,使得C99的一些特性成为了C11的可选项。新标准添加了可选项支持当前使用多处理器的计算机。
1.8 编程机制
GUN编译器集合和LLVM项目
GUN项目始于1987年,是一个开发大量自由UNIX软件的集合(GUN的意思是“GUN’s Not UNIX”,即GUN不是UNIX)。GUN编译器集合(也被称为GCC,其中包含GCC C编译器)是该项目的产品之一。用gcc命令即可调用GCC C编译器。许多使用gcc的系统都用cc作为gcc的别名。
LLVM项目成为cc的另一个替代品。该项目是与编译器相关的开源软件集合,始于伊利诺大学2000年的研究项目。它的Clang编译器处理C代码,可以通过clang调用。
GUN和LLVM都可以用-v选项来显示版本信息,因此各系统都使用cc别名来代替gcc或clang命令。以下组合:
cc -v
显示你所使用的编译器及其版本。
gcc和clang命令都可以根据不同的版本选择运行时选项来调用不同C标准。
gcc -std=c99 inform.c
gcc -std=c1x inform.c
gcc -std=c11 inform.c
第一行调用C99标准,第2行调用GCC接受C11之前的草案标准,第3行调用GCC接受的C11标准版本。Clang编译器在这一点上用法与GCC相同。
第2章 C语言概述
2.2 语言风格
命名
C99和C11允许使用更长的标识符名,但是编译器只识别前63个字符。对于外部标识符,只允许使用31个字符。
操作系统和C库经常使用以一个或两个下划线字符开始的标识符(如,_kcab),因此最好避免在自己的程序中使用这种名称。标准标签都以一个或两个下划线字符开始,如库标识符。这样的标识符都是保留的。同时C语言的名称区分大小。
C99之前的标准要求把声明都置于块的顶部,这样规定的好处是:把声明放在一起更容易理解程序的用途。C99允许在需要时才声明变量,这样做的好处是:在给变量赋值之前声明变量,就不会忘记给变量赋值。
**函数调用语句:**在历年的C标准中从来没有函数调用语句!值得一提的是,函数调用本身是一个表达式,圆括号是运算符,圆括号左边的函数名是运算对象。在C11标准中,这样的表达式是一种后缀表达式。在表达式末尾加上分号,就成了表达式语句。
2.7 调试程序
语法错误:指把有效的C符号放在错误的地方,不遵守C语言的规则就会犯语法错误。
语义错误:如果遵循了C规则,但是结果不正确,那就是犯了语义错误。例如逻辑上的错误,编译器无法检测出。
2.8 关键字和保留标识符
ISO C关键字:
C90 | C99 | C11 | |||
---|---|---|---|---|---|
auto | extern | short | const | _Alignas | _Thread_local |
break | float | sizeof | enum | _Alignof | |
case | for | static | signed | _Atomic | |
continue | goto | struct | void | _Bool | |
default | if | switch | volatile | _Complex | |
do | inline | typedef | _Generic | ||
double | int | union | _Imaginary | ||
else | long | _Noreturn | |||
while | unsigned | _Static_assert |
保留标识符包括那些以下划线字符开头的标识符和标准库函数名,如printf()。
第3章 数据和C
3.1 程序讲解
printf("%f", num) // 打印浮点值
printf("%.2f", num) // .2用于精确控制输出小数点后两位
3.3 数据类型关键字
C语言的数据类型关键字:
最初K&R给出的关键字 | C90标准添加的关键字 | C99标准添加的关键字 |
---|---|---|
int | signed | _Bool |
long | void | _Complex |
short | _Imaginary | |
unsigned | ||
char | ||
float | ||
double |
按计算机的存储方式可分为两大基本类型:整数类型和浮点数类型。
3.4 C语言基本数据类型
八进制和十六进制
0x或0X前缀表示十六进制值,0前缀表示八进制。
以十进制显示数字,使用%d;以八进制显示数字,使用%o;以十六进制显示数字,使用%x。另外,要显示各进制数的前缀0、0x和0X,必须分别使用%#o、%#x、%#X。