头文件和库的区别

foreveryy 2003-07-21 10:19:32
vc在编译时会把头文件包含进来,这时,它调用了什么东西?
在链接的时候又把.lib给包含进来,这又调用了什么?
.h和.lib在这里分别有什么内容,这之间有什么区别吗?

请高手回答
...全文
90 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
speakboy 2003-07-22
  • 打赏
  • 举报
回复
头文件中大部分是声明,比如说变量呀,函数呀,而库中则有函数体,也就是说有处理事件的代码
smallcrocodile 2003-07-21
  • 打赏
  • 举报
回复
.h:是身份证
.lib:是履历
houdy 2003-07-21
  • 打赏
  • 举报
回复
学习了。。
charles_y 2003-07-21
  • 打赏
  • 举报
回复
double add(a,b);
这是头文件里面的东西

double add(a,b)
{
return (a+b);
}
这是库里面的东西,当然对一个编译好的库来说,你是看不到这行代码的。


如果你的程序中用了c=add(a+b);而没有double add(a,b)这一行说明,编译器会抱怨说add(a,b)没有说明。
如果double add(a,b) 已经有了而没有说明要连接的库,连接器(linker)会抱怨说add(&&,*&F)没有实现。
FAICHEN 2003-07-21
  • 打赏
  • 举报
回复
gz
FAICHEN 2003-07-21
  • 打赏
  • 举报
回复
gz
ruihuahan 2003-07-21
  • 打赏
  • 举报
回复
C++语言规定,在使用任何函数、变量、自定义类型前都要声明,.h文件是对库文件中实现的函数、类、结构等的生命,而lib文件中是这些函数等的具体实现。
SeainBlue 2003-07-21
  • 打赏
  • 举报
回复
可以说.h只是包含的需要内容的说明部分,而没有实现部分
.lib链接库中的内容才是实现的功能部分,只不过是通过将实现代码封装到一个库中
这样便于代码的保密,在使用中就像调用你自己程序中的函数一样简单
lyt_hf 2003-07-21
  • 打赏
  • 举报
回复
.h文件是函数等的说明,如函数名,参数表等,
而.lib库是具体的实现代码!
SeainBlue 2003-07-21
  • 打赏
  • 举报
回复
头文件.h只是一个路灯似的东西,指示我们需要找的东西有哪些,在哪里
而.lib链接库才是我们程序真正需要的东西
jian 2003-07-21
  • 打赏
  • 举报
回复
.h文件是用于编译的,其内容主要变量、函数等的声明
.lib文件是用于连接的,主要是变量的定义、函数的实现
mfc168 2003-07-21
  • 打赏
  • 举报
回复
.h类似函数的声明,只有函数返回值,参数及类型
.lib内部是函数的具体实现
C、传统 C++ #include     //设定插入点 #include      //字符处理 #include      //定义错误码 #include      //浮点数处理 #include     //文件输入/输出 #include     //参数化输入/输出 #include    //数据流输入/输出 #include     //定义各种数据类型最值常量 #include     //定义本地化函数 #include      //定义数学函数 #include      //定义输入/输出函数 #include     //定义杂项函数及内存分配函数 #include     //字符串处理 #include    //基于数组的输入/输出 #include      //定义关于时间的函数 #include      //宽字符处理及输入/输出 #include     //宽字符分类 ////////////////////////////////////////////////////////////////////////// 标准 C++ (同上的不再注释) #include     //STL 通用算法 #include      //STL 位集容器 #include #include #include #include #include      //复数类 #include #include #include #include #include       //STL 双端队列容器 #include     //异常处理类 #include #include    //STL 定义运算函数(代替运算符) #include #include       //STL 线性列表容器 #include        //STL 映射容器 #include #include        //基本输入/输出支持 #include      //输入/输出系统使用的前置声明 #include #include      //基本输入流 #include      //基本输出流 #include       //STL 队列容器 #include        //STL 集合容器 #include      //基于字符串的流 #include       //STL 堆栈容器     #include     //标准异常类 #include     //底层输入/输出支持 #include      //字符串类 #include      //STL 通用模板类 #include      //STL 动态数组容器 #include #include using namespace std; ////////////////////////////////////////////////////////////////////////// C99 增加 #include    //复数处理 #include     //浮点环境 #include   //整数格式转换 #include    //布尔环境 #include    //整型环境 #include    //通用类型数学宏 --------------------------------------------------------------------------------------------------------- 补充: 经常在CSDN以及其他之类的技术论坛上问关于C++ 头文件的问题。提出这些问题的往往就是那些刚学C++的新手。当初我是菜鸟的时候也问过类似的问题。 现在来看看下面两个include: #include // 这个就是1998年标准化以后的标准头文件 #include // 这个就是标准化以前的头文件 更本质上的区别就是iostream把标准C++的组件放在一个名位std的namespace里面。而相对的iostream.h则将这些标准组件放在全局空间里,同时在标准化以后旧有的C标准也已经经过改造了。 看看下面这两个头文件 // 标准化后经过改造的C的标准,所有的组件都放在了std中 #include // 标准化以前C++中的C标准 #include // 在看看这个头文件C标准下 基于char* 的字符处理函数 #include // 在标准化以后他变成了这样 #include // 但是很多朋友还看见过这个字符串处理函数,他包含了新的string class #include 经过了标准委员会如此大规模手术后,在98年以前出品的C++编译器(BC3.0,BC5.0)上能顺利通过编译的源文件,在支持新标准的编译器上可能无法顺利通过编译也就是很正常的事了。 [起因] 在回过头来看看标准程序,这个程序涵盖范围相当广大,提过了许许多多好用的功能。正是因为这样标准程序中class的名称和函数名与第三方提供的程序中的class名或是函数名发生名字冲突的可能性大大增大。为了避免这个问题的发生,标准委员会决定将标准程序中每一样东西都放在namespace std中。但是这么做同时有引来了一个新的问题。很多C++程序代码依赖那些已经存在很多年的C++ “准”标准程序(C++迟迟未标准化才导致这些情况的发生),例如iosteam.h,complex.h等等。 为了解决这个新出现的问题,标准化委员会决定设计一些新的头文件名,给那些穿上std外衣的组件所使用。把C++头文件的.h去掉,于是就有前面出现的iostream,同样C的头文件也做了相同的处理,同时在前面加上了一个字母c,以表示是C的头文件(感觉上有中种族歧视的感觉)。同时标准化委员会声明就有的C++头文件将不再列于被支持的名单之中了,而旧有的C头文件为了满足“对C的兼容性”这个古老契约,仍然将继续存活下去。 但是,那些编译器厂商不可能去推翻他们客户的旧有编译器(也跟本不会去这么做),所以那些旧有的C++头文件仍然苟延残喘的活了下来,并不断的扰乱那些C++新兵的心智。 下面就是现在大多数C++开发工具表示头文件的组织状态: 1. 旧的C++头文件 比如iostream.h,他们虽然被标准化委员会所抛弃,但由于各大厂商为了各自的商业利益仍然将继续存活下去,这些头文件的内容将不处于namespace std中。 2. 新的C++头文件如iostream虽然提供了和旧有头文件相同的功能,但他的内容都并入了namespace std中,从而有效避免了名字污染的问题。 3. 标准C的头文件如stdio.h继续获得支持,这类文件的内容并未放在std中。 4. C函数的技能也有对应的新式C++版本,起名称类似cstdio,这类头文件的内容也有幸穿上了std的外衣。 其实标准化以后的标准程序的改动并不只有这些而已,很多的标准化组件都被“tamplate化”。其中就有元老级人物iostream。标准程序的问题并不是用一篇,两篇文章就可以说清楚的。如果你像进一步的了解C++的标准程序的话,你可以看看侯先生的《C++标准程序》。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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