C++ extern keyword on functions. Why no just include the header file?(函数上的 C++ extern 关键字.为什么不只包含头文件?)
问题描述
如果我理解正确,这意味着
If I understand it correctly this means
extern void foo();
函数 foo 是在另一个翻译单元中声明的.
that the function foo is declared in another translation unit.
1) 为什么不直接#include 声明该函数的标头?
1) Why not just #include the header in which this function is declared?
2) 链接器如何知道在链接时到哪里寻找函数?
2) How does the linker know where to look for function at linking time?
也许我应该澄清一下,上面的声明之后是使用函数
edit: Maybe I should clarify that the above declaration is then followed by using the function
foo();
在这个翻译单元中从未定义过.
It is never defined in this translation unit.
推荐答案
1) 可能没有头文件.但是是的,一般来说,对于大型项目,如果多个翻译单元要使用该功能,您应该有一个头文件(不要重复自己).
1) It may not have a header file. But yes, in general, for large projects, you should have a header file if multiple translation units are going to use that function (don't repeat yourself).
2) 链接器搜索它被告知要查找函数和其他符号的所有目标文件和库.
2) The linker searches through all the object files and libraries it was told about to find functions and other symbols.
这篇关于函数上的 C++ extern 关键字.为什么不只包含头文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:函数上的 C++ extern 关键字.为什么不只包含头文件?
基础教程推荐
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 从 std::cin 读取密码 2021-01-01