我知道函数的原型在各自的头文件中。标准函数的声明在标准库中,这就是为什么我们使用术语“using namespace std”。但是非标准函数的声明存储在哪里呢?C++中存储的非标准函数声明在哪里?
回答
标准库不必作为头文件实现。
C++标准指示当您#include <vector>
时会发生什么。它不要求vector
是您的系统上的头文件;它可以作为一个编译器内在来实现,它引入了某些符号和类型。
它规定了当你与这些符号和类型交互时会发生什么。
通常很容易做到这一点作为头文件;但std
中有一些C++功能无法在C++中实现。通常情况下,“表面”交互是在C++中完成的,但他们后来又回到了魔术编译器内部函数。
std
中的大部分都可以存在,并且确实存在为纯粹的头文件。它的其他部分通常被编译成库,通常主要用C或C++编写。他们与操作系统库进行交互,操作系统库也主要由C语言编写(有时也用C++和其他语言编写),后者又与用C语言和汇编语言混合编写的硬件特定代码进行对话。
“运行时”库可以动态或静态链接到您的输出,并充当一种C++所需和特定操作系统提供的“粘合剂”。
其他图书馆可以存在。它们的头文件以编译器确定的方式存储,并以编译器确定的方式进行搜索。动态地或静态地链接它们的库也以编译器确定的方式完成,就像所述库存在的地方一样。
只要它们输出与编译器期望的ABI相匹配的接口,就可以用多种语言编写它们。
你能简单解释一下吗?我没有完全得到你的答案。谢谢。 –
@TanmayBhatnagar如何理解C++如何编译为可执行文件或库? – Yakk
我明白,当我们编译我们的代码时,链接将头文件中的所有原型链接到它们各自的函数声明。然后编译器将源代码转换为目标代码。 –
- 1. 放在哪里声明的目标C
- 2. 在哪里放置函数声明? VB.NET
- 3. 我在哪里可以找到c标准头文件中声明的函数的定义,如stdlib.h?
- 4. C++标准库的标题在哪里
- 5. 为什么这个函数声明两次?回调函数在哪里声明?
- 6. 函数指针存储在哪里?
- 7. 在哪里存储帮助函数?
- 8. 在哪里声明接口?
- 9. NSManagedObjectContext,声明在哪里?
- 10. 声明DRV_QUERYFUNCTIONINSTANCEID在哪里?
- 11. msleep声明在哪里?
- 12. XDisplayName声明在哪里?
- 13. GNU ARM中get_pc()的声明在哪里?
- 14. 在哪里存储静态数组在目标c
- 15. 在哪里存储数据?
- 16. 数据存储在哪里?
- 17. 非原型函数声明
- 18. 准备好声明与存储过程
- 19. 程序使用的DLL,其中声明的变量存储在哪里?
- 20. 哪里声明Visual Studio 2010中的类的构造函数winforms project C++?
- 21. 存储的SAPUI5图标在哪里?
- 22. 声明函数在C++
- 23. Javascript:如何将声明的函数存储在变量中?
- 24. 准备声明:调用非对象上的成员函数
- 25. 如何知道这个函数定义在哪里声明?
- 26. 哪里参数传递给函数时没有声明参数
- 27. C++标准的哪个部分允许在括号中声明变量?
- 28. MySQL。哪里声明。查询
- 29. doctype声明去哪里?
- 30. 在哪里以及如何在asp.net.vb中存储函数
_that这就是为什么我们使用术语“using namespace std”_;一般来说,[我们不](http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice)。 –
执行者希望他们成为的任何地方,除了'std'命名空间以外的任何地方。通常在全局命名空间中。 –
不,经验丰富的C++开发人员从来不会使用“using namespace std;”,因为这会导致不明确的错误。就非C++库函数而言,它们是在未命名的全局名称空间中声明的。 –