黑马程序员技术交流社区

标题: 为什么include可以通过.h的声明文件直接调用.c中定义的函数 [打印本页]

作者: 可爱的小炒肉    时间: 2015-5-27 00:27
标题: 为什么include可以通过.h的声明文件直接调用.c中定义的函数
RT    今天讲到多文件开发这部分   但是不是很明白
作者: 星空眼泪    时间: 2015-5-27 00:41
慢慢来吧
作者: 张晓珊    时间: 2015-5-27 01:08
       include的作用仅仅是复制,将.h文件复制粘贴过来,因为.h文件中放的是函数的声明,而调用函数之前必须要对函数进行声明,目的是在编译时,告诉程序在文件中有这个函数。
       在进行链接时,就会将程序中所有的函数进行链接,这个时候才会检测程序中是否有这个函数。
所以,include不能调用函数,只是声明函数。即使不写include,只要函数定义了,程序也只会警告,不会报错。

作者: 蜡笔小炎    时间: 2015-5-27 01:20
张晓珊 发表于 2015-5-27 01:08
include的作用仅仅是复制,将.h文件复制粘贴过来,因为.h文件中放的是函数的声明,而调用函数之前必 ...

最后一句不科学吧?怎么会不报错呢。不写include系统链接的时候才能找到函数,编译不应该通过吧?
作者: 我是一个小菜鸟    时间: 2015-5-27 01:36
在同一个文件夹或者编译器目录或者系统目录,放置了.c的.h文件可以直接在头文件中双引号里面起声明的作用,你执行的文件在上述目录中可以访问.h文件进行声明,就相当于访问了其他文件的.c文件,这是功能用法,没有为什么(个人观点)
作者: 张晓珊    时间: 2015-5-27 13:15
蜡笔小炎 发表于 2015-5-27 01:20
最后一句不科学吧?怎么会不报错呢。不写include系统链接的时候才能找到函数,编译不应该通过吧? ...

编译只是检测语法错误,链接才会找函数,这是两个步骤,编译会警告,但不会报错。链接是把所有的文件和库函数链接起来,这个时候才会检测函数是否实现了,所以编译能通过。注意是把所有的文件哦,如果函数在的那个文件没有参与编译与链接,即使你加上incude "xxx.h",编译也不会通过。
作者: 蜡笔小炎    时间: 2015-5-27 15:11
张晓珊 发表于 2015-5-27 13:15
编译只是检测语法错误,链接才会找函数,这是两个步骤,编译会警告,但不会报错。链接是把所有的文件和库 ...

我想报第10期试试,你报那一期啊?
作者: 张晓珊    时间: 2015-5-27 16:00
蜡笔小炎 发表于 2015-5-27 15:11
我想报第10期试试,你报那一期啊?

第10期啊
作者: 蜡笔小炎    时间: 2015-5-27 16:07
张晓珊 发表于 2015-5-27 16:00
第10期啊

你流程走到哪了?怎么样,还顺利吗
作者: 张晓珊    时间: 2015-5-27 16:46
蜡笔小炎 发表于 2015-5-27 16:07
你流程走到哪了?怎么样,还顺利吗

准备入学考试了
作者: sunda1314520    时间: 2015-5-27 17:57
本帖最后由 sunda1314520 于 2015-5-27 18:00 编辑

#include标记的头文件中的函数声明会被加入到目标文件中,然后经历过编译、链接,生成正确的目标程序。
作者: yuang4074    时间: 2015-5-28 15:06
张晓珊 发表于 2015-5-27 13:15
编译只是检测语法错误,链接才会找函数,这是两个步骤,编译会警告,但不会报错。链接是把所有的文件和库 ...

你分析很对,但是应该从更高一个层次去解答楼主的疑问。这个层次是:这是编译器的机制。.h里的声明文件相同于一个函数索引列表。编译器定义:要让程序运行期来,它先去编译,找到要用到的函数是否在索引列表。然后。。。。。才是你说的那些。。。。。。
作者: 15578797612    时间: 2015-5-28 15:07
都是第十期的吗?
作者: 张晓珊    时间: 2015-5-28 18:08
yuang4074 发表于 2015-5-28 15:06
你分析很对,但是应该从更高一个层次去解答楼主的疑问。这个层次是:这是编译器的机制。.h里的声明文件相 ...

这么底层的东西对于现在的我们来说没有作用吧?专注这些不切实际啊!
作者: su199325    时间: 2015-5-28 19:46
很简单,相当于拷贝文件内容
作者: 这是829    时间: 2015-5-28 22:56
学习啦,加油!
作者: talent123    时间: 2015-5-28 23:05
函数只要声明了就可以调用啊
放在什么位置并没有任何关系
在.c文件中和在.h文件里 本质没有区别的
作者: 七尺阳光    时间: 2015-5-28 23:15
楼上的说的很对.include只是包含不是调用.跟后面OC中import一样用法
作者: 张晓珊    时间: 2015-5-29 00:41
15578797612 发表于 2015-5-28 15:07
都是第十期的吗?

应该都是打算报名的
作者: 15578797612    时间: 2015-5-29 08:22
张晓珊 发表于 2015-5-29 00:41
应该都是打算报名的

哈哈哈,说的是
作者: yuang4074    时间: 2015-5-29 08:58
张晓珊 发表于 2015-5-28 18:08
这么底层的东西对于现在的我们来说没有作用吧?专注这些不切实际啊!

无论什么,只有研究它的本源,然后去理解它,以后才能洞悉关于它的一切。
作者: huanleabcd    时间: 2015-5-29 16:50
我是新人,看视频的时候老师讲的这个不需要知道为什么,只需要记着就行。。。。
作者:   张恒宇    时间: 2015-5-29 21:13
声明的是.h的头文件,头文件中有很多写好的函数!
作者: x331275955    时间: 2015-5-29 22:04
xxx.h就是xxx.c的函数的一堆声明,方便合作的人调用的,这样不用一个一个去看了,你就把include理解成复制xxx.h 直接粘贴在main函数的文件前头 就可以了,方便还不会出错.
作者: wangguanyang    时间: 2015-5-29 22:59
声明这个.c文件里包含了.h文件里所有的东西




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2