基本词法语法规则与程序元素
C程序是一个字符序列,编译器首先把程序的字符序列分解成称为记号(token)的词法元素,再根据确定的语法规则检查这些记号是否构成合法的串。记号是程序中具有语义的最基本组成元素。
字符及词法元素
1.字符集
C语言源程序是由字符序列构成的,C语言字符集是7位ASCLL码的子集
2.词法元素
编译器对C程序中的字符序列进行词法分析,即按照特定规则分解成称为记号的词法元素。记号共分5类:标识符、关键字、常量(含字符串常量)、运算符和标点符号。编译器从左至右收集字符,总是尽量建立最长的记号,即使结果并不构成有效的C语言程序。相邻记号可以用空白符或者注释符分开。
eg X+++++Y的词法分析
被分解成X、++、++、+、Y。
语法规则
由C语言字符集中的单个字符或多个字符按照确定的规则组成语义上关联的记号,再由记号根据确定的规则构成语句乃至整个程序文本,这些规则称为C语言语法规则。编译器根据语法规则检查程序的合法性,并根据语法规则识别每一条语句,同时进行相应的语义处理。
标识符、关键字及分隔符
1.标识符
C语言规定,标识符由字母、数字和下划线组成,但首字符必须是字母或下划线。大小写敏感!
2.关键字
也称为保留字,都是小写,不能作为普通标识符,但是却可以作为宏名,因为预处理发生在识别关键字之前。最新标准下(C11)的关键字见http://tool.oschina.net/apidocs/apidoc?api=cpp%2Fen%2Fc.html
3.分隔符
统称为空白字符,包括空格符、制表符、换页符及注释符
基本数据结构
数据是程序处理的对象。数据的取值范围及能对该数据实行的运算有该数据的类型决定。数据类型也就是数据的存储方式。它告知编译程序为该类型的对象在内存分配多大的空间,数据类型直接反应了一种语言的数据表达能力。
1.数据类型的分类
2. 整形下各类型范围
3.浮点类型
只有三种浮点类型:float、double、long double.
常量与变量
1.文字常量:C语言有四种文字常量,包括整形、浮点型、字符型、字符串型。
1)整形常量
前缀区别进制:前缀为0表示八进制,0x或者0X表示十六进制,无前缀表示十进制;
后缀指定类型:
u/U表示unsigned l/L ul/UL ll/LL ull/ULL.....
无后缀一般表示int
2)浮点型常量
有两种表示方法
a)带小数点十进制表示法
可以小数点开头,也可以小数点结尾,当然更可以在中间喽!(eg23.7 14. .126)。
b)指数形式
指数部分跟在尾数部分后边,尾数部分同上a)相同,但可以没有小数点指数部分由一个字母e或者E、一个可选的符号+/- 和 一个整数n组成。
同整形常量一样,后缀指定类型,f =float lf=long double 没有后缀表示double
3)字符常量
分为图形符号和转义序列。
注意:'和\虽然是图形符号,但作为字符常量必须使用转义序列
转义序列分为字符转义序列和数字转义序列
字符转义序列:反斜线后跟图形符号,用于表示字符集中的非图形符号和一些特殊的图形字符。如
\0 \a \b \t \n \v \f \r \" \' \\
数字转义序列:
\000表示八进制,用完3个八进制位结束或者遇到第一个非八进制位终止(\11=\011)
\xhh表示十六进制,超过两位编译出错(\x9=\x09)
4)字符串常量
转义序列依然有效
不能直接换行,用“\”或者分开双引号都行
结尾自动补'\0'
2.符号常量
一个符号常量就是一个标识符,是给程序中经常使用的常量定义的名字。c语言有三种表示方法:
1)用#defien指令定义符号常量:预处理简单文本替换
2)用const声明语句定义一个符号常量:编译时分配内存
3)用枚举类型定义一组符号常量
3.变量定义
每个变量都要显示初始化(eg int a=b=2;//error)
运算符和表达式