第一章 初识C语言
- K&R C 或经典C >>
K&R C 或经典C
C语言发展之初,并没有所谓的C标准。1987年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)合著的The C Programming Language(《C语言程序设计》)第1版是公认的C标准
C语言比其他语言更依赖库,因此需要一个标准库。实际上,由于缺乏官方标准,UNIX实现提供的库已成为了标准库
因为ANSI于1989年批准该标准 因为ISO于1990年批准该标准
美国国家标准协会(ANSI)制定
信任程序员; 不要妨碍程序员做需要做的事; 保持语言精练简单; 只提供一种方法执行一项操作; 让程序运行更快,即使不能保证其可移植性。
在最后一点上,标准委员会的用意是:作为实现,应该针对目标计算机来定义最合适的某特定操作,而不是强加一个抽象、统一的定义
1994年,ANSI/ISO联合委员会(C9X委员会)开始修订C标准
遵循了最初C90标准的原则
委员会的用意不是在C语言中添加新特性,而是为了达到新的目标
a) 第1个目标是,支持国际化编程。例如,提供多种方法处理国际字符集。 第2 个目标是,“调整现有实践致力于解决明显的缺陷”。因此,在遇到需要将C 移至64位处理器时,委员会根据现实生活中处理问题的经验来添加标准。 第3个目标是,为适应科学和工程项目中的关键数值计算,提高C的适应性, 让C比FORTRAN更有竞争力 >>
b) 其他方面改变则更为保守 >>
其他方面改变则更为保守
尽量与C90、C++兼容,让语言在概念上保持简单
但并非所有的编译器都完全实现C99的所有改动。因此,你可能发现C99的一些改动在自己的系统中不可用,或者只有改变编译器的设置才可用。
a) 修订标准的原因不是因为原标准不能用,而是需要跟进新的技术 >>
- Microsoft Visual Studio和C标准 >>
在Windows软件开发中,Microsoft Visual Studio及其免费版本Microsoft Visual Studio Express都久负盛名,它们与C标准的关系也很重要。然而,微软鼓励程序员从C转向C++和C#。虽然Visual Studio支持C89/90,但是到目前为止,它只选择性地支持那些在C++新特性中能找到的C标准(如,long long类型)。而且,自2012版本起,Visual Studio不再把C作为项目类型的选项。
典型的C实现通过编译和链接两个步骤来完成这一过程。 编译器把源代码转换成中间代码,链接器把中间代码和其他代码合并,生成可执行文件
1定义程序的目标 2.设计程序 3.编写代码 4编译�5运行程序 6测试和调试程序 7维护和修改程序
目标代码文件缺失启动代码(startup code)。启动代码充当着程序和操作系统之间的接口
目标代码还缺少库函数
- cc -v 显示你所使用的编译器及其版本。 gcc和clang命令都可以根据不同的版本选择运行时选项来调用不同C标准。 gcc -std=c99 inform.c[3] gcc -std=c1x inform.c gcc -std=c11 inform.c >>
a) 第1行调用C99标准,第2行调用GCC接受C11之前的草案标准,第3行调用GCC接受的C11标准版本。Clang编译器在这一点上用法与GCC相同。 >>
b) Cygwin和MinGW >>
Cygwin在自己的视窗运行,模仿Linux命令行环境
MinGW在Windows的命令提示模式中运行
程序中针对特殊硬件设备(如,显示监视器)或操作系统特殊功能(如,Windows 8或OS X)编写的部分,通常是不可移植的
- [1].国际C语言混乱代码大赛(IOCCC,The International Obfuscated C Code Contest)。这是一项国际编程赛事,从1984年开始,每年举办一次(1997、1999、2002、2003和2006年除外),目的是写出最有创意且最让人难以理解的C语言代码。 >>
hello?
- GNU项目始于1987年,是一个开发大量免费UNIX软件的集合(GNU的意思是“GNU’s Not UNIX”,即GNU不是UNIX)。GNU编译器集合(也被称为GCC,其中包含GCC C编译器)是该项目的产品之一。GCC在一个指导委员会的带领下,持续不断地开发,它的C编译器紧跟C标准的改动。GCC有各种版本以适应不同的硬件平台和操作系统,包括UNIX、Linux和Windows。用gcc命令便可调用GCC C编译器。许多使用gcc的系统都用cc作为gcc的别名。 >>
a) LL VM项目成为cc的另一个替代品。该项目是与编译器相关的开源软件集合,始于伊利诺伊大学的2000份研究项目。它的 Clang编译器处理 C代码,可以通过 clang调用。有多种版本供不同的平台使用,包括Linux。2012 年,Clang成为FreeBSD的默认C编译器。Clang也对最新的C标准支持得很好。 >>