起源
1950晶体管计算机年代,欧美计算机学家合力所组成的联席大会共同开发 ALGOL(ALGOrithmic Language),也称为A语言。 1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。 1967年,英国剑桥大学的 Dennis MacAlistair Ritchie(丹尼斯·麦卡利斯泰尔·里奇) 对 CPL语言做了简化,推出了 BCPL (Base Combined Programming Langurage)语言。 1970年美国贝尔实验室的 Brian Wilson Kernighan(布莱恩·威尔森·柯林汉) 以 BCPL 语言为基础,又作了进一步的简化,设计出了很简单的而且很接近硬件的 B 语言(取BCPL的第一个字母),并用B语言写出了第一个 UNIX 操作系统。 1972年~1973年间,贝尔实验室的 Dennis M.Ritchie 在 B 语言的基础上设计出了 C 语言(取BCPL的第二个字母)。 1977年,Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。 1978年,Brian W.Kernighian和 Dennis M.Ritchie共同出版了名著《The C Programming Language》,被C语言开发者们称为“K&R C”。 1989年,ANSI 发布了第一个完整的C语言标准——ANSI X3.159—1989,简称“C89”,不过人们也习惯称其为“ANSI C”。 1990年,ANSI C 被国际标准组织ISO采纳,命名为ISO/IEC9899: 1990,简称为“C90”。 1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC 9899:1999,简称“C99”。 2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899: 2011,简称为“C11”。
优点 1、简洁紧凑、灵活方便 2、运算符丰富 3、数据类型丰富 4、表达方式灵活实用 5、允许直接访问物理地址,对硬件进行操作 6、生成目标代码质量高,程序执行效率高 7、可移植性好 8、表达力强 缺点 1、C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。 2、C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。
C语言关键字
关键字就是已被C语言本身使用,不能作其它用途使用的字。例如关键字不能用作变量名、函数名等。
由ANSI标准定义的C语言关键字共32个: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static
C99标准新增5个关键字: inline 内联函数,在C++中用的多, 它是宏定义的一种优化实现方式 restrict 它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式 _Bool unsigned int 型,在C99中被定义为布尔型,只可容纳0、1两个值 _Complex 复数类类型 _Imaginary 纯虚函数类型
C11标准新增1个关键字: _Genneric 泛型
根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类:
一、数据类型关键字 A .基本数据类型(5个) void :声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果 char :字符型类型数据,属于整型数据的一种 int :整型数据,通常为编译器指定的机器字长 float :单精度浮点型数据,属于浮点数据的一种 double :双精度浮点型数据,属于浮点数据的一种 B .类型修饰关键字(4个) short :修饰int,短整型数据,可省略被修饰的int。 long :修饰int,长整形数据,可省略被修饰的int。 signed :修饰整型数据,有符号数据类型 unsigned :修饰整型数据,无符号数据类型 C .复杂类型关键字(5个) struct :结构体声明 union :共用体声明 enum :枚举声明 typedef :声明类型别名 sizeof :得到特定类型或特定类型变量的大小 D .存储级别关键字(6个) auto :指定为自动变量,由编译器自动分配及释放。通常在栈上分配 static :指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部 register :指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数 extern :指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 const :与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变) volatile :与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值
二、流程控制关键字 A .跳转结构(4个) return :用在函数体中,返回特定值(或者是void值,即不返回值) continue :结束当前循环,开始下一轮循环 break :跳出当前循环或switch结构 goto :无条件跳转语句 B .分支结构(5个) if :条件语句,后面不需要放分号 else :条件语句否定分支(与if连用) switch :开关语句(多重分支语句) case :开关语句中的分支标记 default :开关语句中的“其他”分支,可选。 C .循环结构(3个) for:for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2..循环,其中2为循环条件。在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次,也可能一次也不计算。循环体可能多次执行,也可能一次都不执行。 do :do循环结构,do 1 while(2); 的执行顺序是1->2->1..循环,2为循环条件 while :while循环结构,while(1) 2; 的执行顺序是1->2->1..循环,1为循环条件 以上循环语句,当循环条件表达式为真则继续循环,为假则跳出循环。
C语言34种运算符
按优先级从高到低排序,空行优先级下降一级别。
() 圆括号 [] 下标 -> 指针型结构成员 . 结构成员 /* 单目、右结合运算 */ ! 逻辑非 ~ 位非 ++ 自增 -- 自减 - 取负 (类型) 类型转换 * 取内容 & 取地址 sizeof 求数据类型或者表达式的长度 /* 单目、右结合运算 */ /* * 双目、左结合运算 * */ * 乘 / 除 % 求余 + 加 - 减 << 左移 >> 右移 < 小于 <= 小于等于 > 大于 >= 大于等于 == 等于 != 不等于 & 位与 ^ 位异或 | 位或 && 与 || 或 /* * 双目、左结合运算 * */ ?: 条件运算 /* * * 三目、右结合运算 * * */ = 赋值运算(+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=) , 逗号运算
时间: 2024-10-08 13:50:25