《c和指针》——1
翻译步骤:
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++中修饰类中的)