外部函数 与 include的区别

hello_ljfbest 2013-11-14 07:17:00
extern int fun (),在一个文件中不#include可以直接调用其它文件的外部函数,那和#include有什么区别哪?
我知道的是#include后相当于把文件中的内容直接拷贝到#include处了,那外部函数哪?#include需要考虑多个文件重复包含问题,不用#inlcude直接调用外部函数却没有此问题,求解答include与外部函数 两者优劣!
...全文
291 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjfdqchwhj 2013-11-18
  • 打赏
  • 举报
回复
楼主,其实这是编译器干的事情。 我简单随性点说吧: #include “A.h” 这个宏告诉编译器,这个文件要把A.h 中的内容全部复制过来。 extern int fun 告诉编译器: 有这个函数,你在这个文件里可以使用这个函数,但是这个函数是在另外一个文件中定义的。
mymtom 2013-11-18
  • 打赏
  • 举报
回复
#include 可以看做是接口的组织方式。
云梦泽1989 2013-11-18
  • 打赏
  • 举报
回复
各有优劣,适用于不同的场合。就extern而言,因为C++支持分离式编译,声明和定义可分开进行,声明只是使得名字为程序所知,就像知道有这么个人而且他是美国人就可以了,一个文件如果想使用别处定义则必须包含对那个名字的声明,就像我们需要一个美国外教,他不一定非得呆在我们学校,而定义是创建了这样一个实体。定义出现在他该出现的地方,但别处需要时需要只需要声明,像个客座教授,在别的学校只挂了名,人家有需求要去时才去,平日就呆自己学校。
jzzjsy 2013-11-18
  • 打赏
  • 举报
回复
extern 用多了,会造成整个程序的架构的混乱,include就比较清晰了。建议少用extern
jsbzc 2013-11-17
  • 打赏
  • 举报
回复
函数默认链接属性是 extern。 这里显示的使用 extern 关键字,是因为该函数是非 c 的,需要链接器进行特别的处理。 如;汇编或其他编译器生成的函数。 头文件其实就是交叉引用表。也就是说,你需要在两个以上的文件中使用该表格,才能起到交叉引用的作用。 否则,你是不需要这份表格的。 #include
xiaohuh421 2013-11-15
  • 打赏
  • 举报
回复
因为include方便管理, extern一般只是用于在某个头文件中声明其对应cpp中定义的变量, 方便被其它头文件包含而不会重定义. extern一般写在头文件中, 要用extern声明的变量的时候, 包含头文件即可. 你说的include会重现重定义, 是因为你把 变量的定义 或者 函数的实现写在了头文件中, 而这些变量一般应该写在.cpp中, 除非你自己能保证这个头文件不会出现重复包含. 不过, 在头文件中也有解决变量重定义的问题. __declspec(selectany) int g_val = 0;
angel_su 2013-11-15
  • 打赏
  • 举报
回复
工程大文件多,你就会乖乖#include...
  • 打赏
  • 举报
回复
extern是外部的意思。 这是一个储存类型~但是如果函数定义前加上extern或缺省,表示该函数可以被其它源文件的函数所调用(但在那个源文件中必须对该函数先进行声明,进行作用域扩展),叫外部函数。
mujiok2003 2013-11-15
  • 打赏
  • 举报
回复
一个头文件可以包含很多(函数原型和类型)声明. 推荐使用#include 头文件,不要总是使用前显示声明:避免重复代码, 也避免风险。
bai12345633 2013-11-15
  • 打赏
  • 举报
回复
如果只是用函数的话,一般情况下是不用include的,因为函数的实现在.c文件中,如果你要include的话还得把函数的声明写到.h文件中,使用extern效果一样。使用include的话一般是为了使用这个.h文件的结构体或者宏定义,因为宏没法extern。
lm_whales 2013-11-14
  • 打赏
  • 举报
回复
函数原型声明的extern 可以省略。 因为函数的存储类型,缺省是extern 。 头文件里的函数,一般不写extern 。 外部变量声明,一般不能省略extern。
hello_ljfbest 2013-11-14
  • 打赏
  • 举报
回复
引用 1 楼 N_sev7 的回复:
extern只是告诉编译器有这个函数,用就行了 但是当连接的时候,如果在不同的工程里面 若不包含定义此函数的头文件则会报错 详细解析可以参考如下 http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html
这篇文章介绍挺详细的,谢谢
AnYidan 2013-11-14
  • 打赏
  • 举报
回复
引用 2 楼 max_min_ 的回复:
#include 和外部函数完全不同的东西,那里有什么可比性啊! 如果有N个函数,N个结构体 ,你一个一个extern么?
如果有N个函数,N个结构体 在 M 个 c 文件中,你能保证每处都 extern 的一样吗?
hello_ljfbest 2013-11-14
  • 打赏
  • 举报
回复
引用 2 楼 max_min_ 的回复:
#include 和外部函数完全不同的东西,那里有什么可比性啊! 如果有N个函数,N个结构体 ,你一个一个extern么?
今天在gcc下试的不用extern,直接调用外部函数也可以,而在windows下却不可以,难道是编译器的不同造成的?
max_min_ 2013-11-14
  • 打赏
  • 举报
回复
#include 和外部函数完全不同的东西,那里有什么可比性啊! 如果有N个函数,N个结构体 ,你一个一个extern么?
N_Sev7 2013-11-14
  • 打赏
  • 举报
回复
extern只是告诉编译器有这个函数,用就行了 但是当连接的时候,如果在不同的工程里面 若不包含定义此函数的头文件则会报错 详细解析可以参考如下 http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧