如果不使用一个函数,编译器会不会将些函数编译进exe文件中?

srxumin 2016-05-08 09:29:49
a.c
main(){}

b.h
fun();


b.c
fun(){}


因为a.c没有#include "b.h",那编译器的release版本会不会将b.c的fun函数一起编译进exe文件中?
...全文
130 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 版主 2016-05-08
  • 打赏
  • 举报
回复
当启动连接程序时,它会寻找“未定义的外部函数”,也就是说,它将在每一个库文件中查找源代码文件中未定义的函数。当它找到一个未定义的外部函数后,它会引入包含该函数定义的目标代码。(obj)。不幸的是,如果这个函数是在一个包含其它函数定义的源文件中被编译的话,那么这些函数也会被包含进来,你的可执行代码中将包含一些不需要的代码。因此,将库函数放到各自的源文件中是很重要的——否则会浪费宝贵的程序空间。有些编译程序包含特殊的“精明的”连接程序,这些连接程序能查出不需要的函数并去掉它们,从而使这些函数不再进入你的程序。
Saleayas 2016-05-08
  • 打赏
  • 举报
回复
就算你 #include 的了,但是你没有引用的符号都不会编译进最终的可执行镜像中。 包括 .exe 和 .dll . SDK 中包含所有的开发函数,最终的 .exe 只有你使用的函数。 所以,如果需要把一个没有使用的符号(函数和变量等等)编译进 exe 或者 dll 。 需要特殊的方式。

69,371

社区成员

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

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