C++为什么使用静态库还要包含头文件呢?
如图,用到了URLDownloadToFile这个函数,需要使用urlmon.lib这个静态库,但看别人写的,会先写包含一个关于这个静态库的头文件,我这里像他们一样也在前...
如图,用到了URLDownloadToFile这个函数,需要使用urlmon.lib 这个静态库,但看别人写的,会先写包含一个关于这个静态库的头文件,我这里像他们一样也在前面包含了头文件..但我发现似乎把#include删掉之后,再代码末尾添加#pragma comment(lib,"urlmon.lib") 程序编译也没有一点问题...那别人的#include的意义何在??还是说这是他写错了呢?谢谢
展开
1个回答
展开全部
#include的头文件一般是变量和函数或宏的定义。下面结合你的问题来说说为什么还要包含头文件。
首先要知道c/c++代码到生成为程序有2大过程,一个是编译过程,一个是链接过程。
若要使用URLDownloadToFile函数,就必须告诉编译器这个函数的定义,比如函数有几个参数,各个参数的类型等等,就是函数的定义,编译器就会根据这些判断你的调用是否合法或者是否有错误,没问题才会实现正常的调用,如果不包含,第一步的编译过程就通不过,所以必须包含对应头文件,如果不包含头文件,那你给函数在代码中写个函数定义也行。
通过了编译过程,下一步就是链接过程,就是把代码碎片链接在一起形成可以运行的程序。如果没有#pragma comment(lib,"urlmon.lib") 链接就不能通过,因为编译器或链接器将找不到URLDownloadToFile这个函数模块进行链接。
再来说下为什么你删除也能编译,可能原因:
1.在其它地方有函数定义。
2.直接用了上次正确的编译代码,而直接链接。
首先要知道c/c++代码到生成为程序有2大过程,一个是编译过程,一个是链接过程。
若要使用URLDownloadToFile函数,就必须告诉编译器这个函数的定义,比如函数有几个参数,各个参数的类型等等,就是函数的定义,编译器就会根据这些判断你的调用是否合法或者是否有错误,没问题才会实现正常的调用,如果不包含,第一步的编译过程就通不过,所以必须包含对应头文件,如果不包含头文件,那你给函数在代码中写个函数定义也行。
通过了编译过程,下一步就是链接过程,就是把代码碎片链接在一起形成可以运行的程序。如果没有#pragma comment(lib,"urlmon.lib") 链接就不能通过,因为编译器或链接器将找不到URLDownloadToFile这个函数模块进行链接。
再来说下为什么你删除也能编译,可能原因:
1.在其它地方有函数定义。
2.直接用了上次正确的编译代码,而直接链接。
Storm代理
2023-08-29 广告
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询