第一章:基本概念
1.1环境
ANSI C的实现存在两种环境:翻译环境 和 执行环境。
翻译环境:源代码->可执行代码(机器指令)
执行环境:执行可执行代码
那么问题来了,什么叫做“交叉编译”?
答:翻译和执行在不同类型的机器上。
1.1.1翻译
编译(预处理、解析):源代码->目标代码(该代码可用优化器优化)
链接:(目标代码+库函数+启动代码)->可执行代码
1.1.2执行(见C和指针21页)
载入内存->调用main函数->执行程序代码->终止
1.2词法规则
一个ANSI C程序由声明和函数组成。声明描述了函数和函数将要操作的数据类型,函数定义了需要执行的工作。
1.2.1字符
C标准规定规定字符集必须包括大小写字母、0~9、
! “ # % ‘ ( ) * + , - . / : ; < > = ? [ ] \ ^ _ { } | ~
和空白字符:换行符(\n)、空格( 或\32)、水平制表符(\t)、垂直制表符(\v)、格式反馈字符(打印显示为空白)
三字母词:有时候不一定适用
??= equals # ??) equals ]
??! equals | ??(equals [
??' equals ^ ??> equals }
??/ equals \ ??< equals {
??- equals ~
转义字符(escapesequence)或者字符转义(character escape)
\? \” \’ \\ \a \b \f \n \r \t \v
\ddd表示1~3个八进制数字,取值范围\0~\377,超出的部分将会解释成多个字符
例:
printf("\12345");
结果:
S45
\xdd表示1~2个十六进制数字,取值范围\0~\FF
注意:ASCII码定义了\0~\7E,其他数值没有定义输出为空。
例:
printf("\x101");
结果:
[Warning]:hexescape sequence out of range
1.2.2注释
注释用//或者/* */
注意:注释不能嵌套;注释可以出现在任何空格可以出现的地方;
1.2.3标识符
标识符便是变量、函数、类型等的名字,由字母、数字和下划线组成,开头只能以字母或者下划线开头。C语言区别大小写。C语言的关键字(char auto do等)是保留的,它们不能被标识符使用。
1.3编程风格
C语言是一个自由形式的语言,用清楚的风格编写程序便于维护和阅读。