https://www.jianshu.com/p/a0637aac670d
1.解释性语言是在import进来的时候直接把对应的模块进行文件解释一边,而不是简单的把源文件包含进来。
2.编译性语言,编译出来的目标文件包含了足够的元数据(c++没有元数据(函数定义、class定义等等)概念,所以在辨别符号定义时需要根据前面所有代码进行解析),import的时候直接读取目标文件的内容即可,不需要读源文件。
这两种做法声明与定义不一致的问题,因为这里声明与定义是在一起的。同时这种手法不会引入不想要的名字,大大简化了名字查找的负担,也不会担心import进来的顺序。

向前声明

向前声明可以避免大量的编译时依赖,让目标程序可以在只有函数签名没有函数定义的情况下也可以编译通过,但是声明与定义的分离会导致声明与定义不一致的问题。同时声明与定义返回类型不一致时不会检测出来。