C陷阱与缺陷--读书笔记4 连接

第四章
 
一、知识点
1、典型的连接器把由编译器或汇编器生成的若干个目标模块,整合成一个被称为载入模块或可执行文件的实体,该实体能够被操作系统直接执行。(P74)
 
2、连接器通常把目标模块看成是由一组外部对象组成的。每个外部对象代表着机器内存中的某个部分,并通过一个外部名称来识别。因此,程序中的每个函数和每个外部变量,如果没有被声明为static,就都是一个外部对象。除了外部对象之外,目标模块还可能包括了对其他模块中的外部对象的引用。当连接器生成载入模块的过程中,它必须同时记录这些外部对象的引用。当连接器读入一个目标模块时,它必须解析出这个目标模块中定义的所有外部对象的引用,并作出标记说明这些外部对象不再是未定义的。(P74)
 
3、在C语言中,一个未指定初始值的外部变量一般被初始化为0。(P75)
 
4、每个外部对象都必须在程序某个地方进行定义。因此,如果一个程序中包括了语句:
extern int a;
那么,这个程序就必须在别的某个地方包括语句:
int a;
这两个语句可以是在同一个源文件中,也可以位于程序的不同原文件中。(P75)
 
5、static修饰符是一个能够减少命名冲突的有用工具。比如 static int a; 和 int a;含义相同,只不过这里a的作用域限制在一个源文件内,对于其他源文件,a是不可见的。static 修饰符不仅适用于变量,也适用于函数。(P78)
 
6、如果一个函数在被定义或声明之前被调用,那么它的返回类型就默认为整型。(P80)
 
7、如果一个函数的调用与定义分别位于不同的文件中,那么我们必须在调用它的文件中声明这个函数:(P81)
double square(double);
 
main(){
     printf("%g\n", square(0.3));
}
posted on 2012-05-01 09:19  谷堆旁边  阅读(186)  评论(0编辑  收藏  举报