GRA*_*ZER 6 c++ compilation header
根据我所阅读和理解的内容,#include源文件中的指令(例如ex:)main.cpp只是将包含文件的内容复制到.cpp.因此,当我包含头文件时,对于ex:,yum.h所有语句yum.h都被复制到main.cpp.
头文件只有声明,实际定义将在相应的.cpp文件中,如yum.cpp.
因此,在编译时main.cpp,如何将编译器知道要查找提及任何函数的定义yum.h中yum.cpp?编译器如何知道如何编译yum.cpp文件,因为在main.cpp文件或文件中都没有引用它yum.h.
另外,为什么要yum.h加入yum.cpp?
这听起来像是一个愚蠢的问题.我是OOP和C++的初学者,我只是想了解发生了什么.
das*_*ght 10
简短回答:标题与其实现之间没有关系.一个可以在没有另一个的情况下存在,或者两者可以放在具有不相关名称的文件中.
在编译过程中
main.cpp如何将编译器知道要查找提及任何函数的定义yum.h中yum.cpp?
编译器不知道.每次它看到对在其中声明的内容yum.h或任何其他头文件的引用时,它都会留意相应的定义.
如果编译器到达翻译单元结束时定义不存在,它会将未满足的引用写入其main.o输出,并注明它们来自的位置.这称为符号表.
然后编译器编译yum.cpp,从中查找定义yum.h,并将其位置写入yum.o符号表.
一旦所有cpp文件已被处理,连接抓住所有.o文件,并从他们那里建立一个组合符号表.如果仍有不满意的引用,则会发出错误.否则,它将引用main.o与相应的符号链接起来yum.o,完成该过程.
考虑一个例子:假设yum.h声明了一个int yum = 0定义的全局变量yum.cpp,并main.cpp打印该变量.编译器main.o使用符号表生成"我需要int yum在地址1234处定义",yum.o文件的符号表说"我int yum在地址9876".链接器将"我需要"与"我有"匹配,将9876放在地址1234.
| 归档时间: |
|
| 查看次数: |
2505 次 |
| 最近记录: |