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

C语言 码拜 5年前 (2016-04-25) 365次浏览
a.c

main(){}

b.h

fun();

b.c

fun(){}

原因是a.c没有#include “b.h”,那编译器的release版本会不会将b.c的fun函数一起编译进exe文件中?

解决方案

20

就算你 #include 的了,但是你没有引用的符号都不会编译进最终的可执行镜像中。
包括 .exe 和 .dll .
SDK 中包含全部的开发函数,最终的 .exe 只有你使用的函数。
所以,假如需要把一个没有使用的符号(函数和变量等等)编译进 exe 或 dll 。
需要特殊的方式。

40

当启动连接程序时,它会寻找“未定义的外部函数”,也就是说,它将在每一个库文件中查找源代码文件中未定义的函数。当它找到一个未定义的外部函数后,它会引入包含该函数定义的目标代码。(obj)。不幸的是,假如这个函数是在一个包含其它函数定义的源文件中被编译的话,那么这些函数也会被包含进来,你的可执行代码中将包含一些不需要的代码。因此,将库函数放到各自的源文件中是很重要的——否则会浪费宝贵的程序空间。有些编译程序包含特殊的“精明的”连接程序,这些连接程序能查出不需要的函数并去掉它们,从而使这些函数不再进入你的程序。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明假如不使用一个函数,编译器会不会将些函数编译进exe文件中
喜欢 (0)
[1034331897@qq.com]
分享 (0)