外部函数 与 include的区别
extern int fun (),在一个文件中不#include可以直接调用其它文件的外部函数,那和#include有什么区别哪?
我知道的是#include后相当于把文件中的内容直接拷贝到#include处了,那外部函数哪?#include需要考虑多个文件重复包含问题,不用#inlcude直接调用外部函数却没有此问题,求解答include与外部函数 两者优劣!
[解决办法]
extern只是告诉编译器有这个函数,用就行了
但是当连接的时候,如果在不同的工程里面
若不包含定义此函数的头文件则会报错
详细解析可以参考如下
http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html
[解决办法]
函数原型声明的extern 可以省略。
因为函数的存储类型,缺省是extern 。
头文件里的函数,一般不写extern 。
外部变量声明,一般不能省略extern。
[解决办法]
因为include方便管理, extern一般只是用于在某个头文件中声明其对应cpp中定义的变量, 方便被其它头文件包含而不会重定义.
extern一般写在头文件中, 要用extern声明的变量的时候, 包含头文件即可.
你说的include会重现重定义, 是因为你把 变量的定义 或者 函数的实现写在了头文件中, 而这些变量一般应该写在.cpp中, 除非你自己能保证这个头文件不会出现重复包含.
不过, 在头文件中也有解决变量重定义的问题.
__declspec(selectany) int g_val = 0;
[解决办法]
楼主,其实这是编译器干的事情。
我简单随性点说吧:
#include “A.h” 这个宏告诉编译器,这个文件要把A.h 中的内容全部复制过来。
extern int fun 告诉编译器: 有这个函数,你在这个文件里可以使用这个函数,但是这个函数是在另外一个文件中定义的。
[解决办法]
各有优劣,适用于不同的场合。就extern而言,因为C++支持分离式编译,声明和定义可分开进行,声明只是使得名字为程序所知,就像知道有这么个人而且他是美国人就可以了,一个文件如果想使用别处定义则必须包含对那个名字的声明,就像我们需要一个美国外教,他不一定非得呆在我们学校,而定义是创建了这样一个实体。定义出现在他该出现的地方,但别处需要时需要只需要声明,像个客座教授,在别的学校只挂了名,人家有需求要去时才去,平日就呆自己学校。