翻译步骤:
1,组成程序的每个源文件通过编译分别转成目标代码; 2,各个目标代码通过链接器捆绑在一起,形成一个单一完整的可执行程序。 注:链接器同时可以把使用的函数(不管是c标准的还是程序员自己编写的)都链接到程序中。编译过程: 1,预处理器处理:执行一些文本操作(#define和#include文本替代); 2,源代码经过解析:判断语句的意思; 3,产生目标代码; 若加入了要求需要优化的选项,优化器要对目标代码进行优化。执行: 1,程序载入到内存中:这一步一般由操作系统完成,是那些不是存放在堆和栈中尚未初始化的数据获得初值; 2,程序执行开始 3,程序终止:可能成功可能失败; 注:运行时堆栈:用于存储函数的局部变量和返回地址;静态内存:存储在静态内存中的数据在整个程序执行过程中一直保留他们的值声明和定义:函数声明描述函数将要操作的数据类型和返回类型;函数定义则是需要执行的步骤。转义字符: \a 响铃(BEL) \b 退格(BS) \f 换页(FF) \n 换行(LF) \r 回车(CR) \t 水平制表(HT) \v 垂直制表(VT) \\ 代表一个反斜线字符''\' \' 代表一个单引号(撇号)字符 \" 代表一个双引号字符 \? 代表一个问号 \0 空字符(NULL) \ddd 1到3位八进制数所代表的任意字符 三位八进制 \xhh 1到2位十六进制所代表的任意字符 二位十六进制注释: /*开头;*/结尾,其间所有都被注释掉。绝大多数注释是成块出现的。标识符: 变量,函数,类型等的名字,以字母,数字和下划线组成,并不能以数字开头;标识符长度没有限制,但是标准允许编译器忽略31以后的字符;c语言对字母大小写敏感。良好的编程风格:提高程序可读性,更容易维护。链接属性: none:总是被当做单独的个体; external:无论声明多少次,位于几个源文件都表示同一个实体; internal:在同一个文件内的所有声明都只同一个实体。static关键字:(说明一下,本书讲的是结合链接属性来讲的,有点难懂,参考《程序员面试宝典的解释》附带修饰c++的类) 1. 用于函数内部的局部变量时,该变量的内存只能分配一次,其值在下次调用时维持上次的值; 2. 用于全局变量时,使变量的作用域限制在一个模块(文件)内,但不能被外部模块函数访问; 3. 用于函数时,使函数只能可以被模块内其他函数访问,这个函数的使用范围被限制在声明他的模块内; (上述是c语言的修饰) 4. 用于类成员变量时,代表该变量属于类的(即所有对象共享这个变量),对类的所有对象只是一份拷贝; 5. 用于类成员函数时,代表该函数为整个类所有。注意,该函数不接收this指针,也意味着不能调用一般的成员函数或者变量 (后两个是c++中修饰类中的)