独立编译
C++ 语言支持"独立编译separate compile"
比如,你想开发一个程序,这个程序里的所有的内容,你无需全部写到一个cpp文件里
而是可以分解到许多的cpp文件里。
不同的cpp文件,在编译compile时,是完全独立的!!! 与其他cpp无任何关联
比如有1. cpp 和 2. cpp, 他俩共同组成了你的程序。
# 比如他俩里面,都有int A= 123 ; 的全局变量,这肯定是报错的
# 因为所有的子cpp,最终都要合并为'1个程序' 里面
1 ,编译期间: 1. cpp -> 1. obj 2. cpp -> 2. obj
这两个编译的过程,即生成目标obj文件的过程,是完全独立的!!!
此时是不会报错的。 不同的cpp文件在编译期间,是不会和其他cpp文件互通的!
# 编译的顺序,是未知的!!! 你不知道哪个cpp最先编译,最后编译!!
# 并不说: 谁的cpp是实现谁先,谁的cpp是引用声明( extern ) 谁就后
2 ,链接link期间: 将所有的obj文件做一次link链接,生成exe
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
举例:
你的1. cpp里的'全局域' :
int A = 123 ; ' 都是实现 '
int func ( ) {
return 123 ; }
你的2. cpp,3. cpp,main. cpp等等的'全局域' :
extern int A; ' 都是引用声明 '
int func ( ) ;
# 只要2. cpp里,写了这些"引用声明" ,那么你2. cpp里,就可以使用这些东西了
原理:
2. cpp里的这些引用声明(其实现都在其他的cpp里),比如int func ( ) ;
在'编译器在编译2.cpp' 时,会生成一个(符号表symbol table)
此时,这个"int func()" ,就会存入这个符号表中。
在'进行链接LINK' 时,
项目结构
1
/ 1. hpp:
# ifndef __1_HPP__
# define __1_HPP__
int func1 ( ) {
DE ( "111" ) ; return 1 ; }
int A = func1 ( ) ;
# endif
/ Main. cpp
# include "1.hpp"
int func2 ( ) {
DE ( "222" ) ; return 1 ; }
int B = func2 ( ) ;
int main (