gpt4 book ai didi

c++ - 如何将头文件编译成可执行文件?

转载 作者:太空狗 更新时间:2023-10-29 21:22:41 24 4
gpt4 key购买 nike

当您从 C 标准库或 C++ STL 中包含一个头文件(.h、.hpp、.hh、.hxx 扩展名)时(甚至包含 Microsoft 的大头文件,如 windows.h), 并且只使用其中有限数量的函数,整个文件变成二进制文件并复制到可执行文件,还是只是正在使用的特定相关函数变成二进制文件?

如果正在复制整个文件(这就是我认为实际发生的情况,因为 windows.h 具有宏定义以减少冗余;例如 WIN32_LEAN_AND_MEAN)-为什么会这样?为什么 #include 预处理器命令不只复制使用过的函数(以及这些函数在后台使用的其他函数)?是不是更划算?

如果只复制相关函数 - 为什么我们必须首先进行 header 包含?为什么我们不在需要时使用和编译大量函数,就像 PHP 等解释型语言中的情况(以及 Python 中的某些情况)。如果只是因为“C 和 C++ 更旧并且已经标准化”,为什么不在他们的新版本中这样做呢?或者至少现代编译器允许它(我们已经看到编译器为了现代开发人员而改变老化语言的情况)?

最佳答案

头文件只是告诉编译器外部函数和变量的类型,定义宏,类型等。什么都不会被复制。源文件中引用的任何函数和变量(称为外部符号)都将在链接器阶段链接进来。

如果您在程序中包含 stdio.h 并使用 printf,编译器会将 printf 添加为目标文件中的“未解析”符号,然后链接器将尝试在您明确指定的目标文件中查找名为 printf 的函数链接,或在配置为搜索的库中。

如附近所述,#include 文件和将该文件的内容复制到您的源文件之间并没有真正的区别。如果该包含文件包含函数或数据定义(不仅仅是声明),那么这些 DO 将成为目标文件的一部分。

关于c++ - 如何将头文件编译成可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20019441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com