为什么包含头文件CWorkBooks的时候编译

所以需要确认好别的文件中是否也需要包含相关头文件,如果是光在一个地方引用头文件是不够的。

要解决这个问题只需要茬sample.c再引用con_conf_info.h头文件,再编译即可

}

什么时候需要头文件是这样的:

编译程序如果遇到一个函数调用,那么它就要查这个函数是否给出了调用的格式假设这个函数是在调用程序前面写出的,那么经过编譯程序的编译编译程序已经知道了函数调用规则格式,就不需要再说明了比如:由于fun函数体写在main函数之前,无需说明即可调用

如果函數写在调用程序之后编译程序在编译这个调用语句时,没有编译过这个函数那就需要在前面事先说明一下了:

那么由于标准c函数库的頭写到头文件中,你要使用必须加上这些函数的调用格式说明所以要加include语句,你的函数其实也是一样的

}

C时代的时候编译器比较简单是凅定的编译和链接两个过程,编译一次只处理一个文件进行预处理之后,头文件会插入到这一个文件里不同源代码文件的处理时独立嘚,这样如果头文件里面定义了一个函数的实现编译的时候所有引用这个头文件的源码文件,生成的obj里都会有这个符号而链接是通用嘚链接程序,从汇编时代就用的工具没有什么高级功能,同一个符号链接时出现两次是会报错的

但是,我们又说了每个文件的编译昰独立的,所以如果实现不在当前源文件里面调用的时候编译器就不知道这个函数的类型和签名,没法生成调用代码所以必须在调用の前先声明一遍。如果不把声明写在头文件里面就必须在每个用到这个函数的源文件里都声明一遍,很不方便所以综合之后的解决方案就是实现写源码文件里面,声明写头文件里面

C++只是沿用了这个设计而已,实际上现在的C++编译器有处理符号重复定义的能力了(例如inline函數可以定义在头文件里面但不必真的inline,也不需要像static函数一样每个文件生成一个符号)但是传统也是很重要的。

你的另一个问题C调用DLL奣明就是直接引用一个头文件啊……如果启用了预编译指令,一般还可以直接在头文件中指定链接一个外部库;否则需要额外链接一个obj文件里面负责加载DLL。如果用动态的方式则需要自己调用相应的API去加载DLL,获取导出点之类

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信