C++ 关于内存的转发声明到底是什么?

C++ 关于内存的转发声明到底是什么?,c++,c,memory-model,C++,C,Memory Model,我从较高的层次上理解了函数声明的作用:在文件的顶部声明它们,以便编译器知道您正在调用哪些函数。然而,编译器究竟是如何处理它的?我知道函数写在内存的文本部分,并且期望参数由堆栈上的寄存器给出。函数原型是否也放在文本中?或者转发声明只是链接编辑器用来将所有文件连接在一起的指示符,它们在最终产品中被“删除”了吗?还是编译器对它们做了其他的事情 我在网上四处寻找,找不到一个好的资源,所以如果你们中的任何人能回答这个问题,或者给我一个概述这个特定现象的资源,那将不胜感激 编辑 我认为问题中有误解,这是我的

我从较高的层次上理解了函数声明的作用:在文件的顶部声明它们,以便编译器知道您正在调用哪些函数。然而,编译器究竟是如何处理它的?我知道函数写在内存的文本部分,并且期望参数由堆栈上的寄存器给出。函数原型是否也放在文本中?或者转发声明只是链接编辑器用来将所有文件连接在一起的指示符,它们在最终产品中被“删除”了吗?还是编译器对它们做了其他的事情

我在网上四处寻找,找不到一个好的资源,所以如果你们中的任何人能回答这个问题,或者给我一个概述这个特定现象的资源,那将不胜感激

编辑


我认为问题中有误解,这是我的错误。我的问题是C编译器如何准确地利用转发声明。从下面的答案可以看出,它是在c代码转换为汇编代码的过程中使用的。这是正确的吗

函数原型只是一种通知编译器如何调用函数的方法,而不必提供任何实现细节

调用者需要知道的只是如何调用它:传递什么参数以及期望返回什么

其他所有内容都应该尽可能隐藏起来,以便进行适当的封装,使函数能够在不破坏当前使用它的任何人的情况下,以其内部所需的方式进行更改

举例来说,这里有一个用于存储键值对(两个字符串)的函数原型:

这允许编译器确保您实际传入两个C字符串并返回一个完整的错误代码。但它并没有揭示函数的内部结构。它可以使用各种形式的平衡树、动态分配的数组、到SQL数据库的连接或位于外蒙古的NFS服务器上的文本文件


底线是,只要函数签名本身保持一致,就可以以任何方式改进实现。

我想你的意思是说
转发声明
,而不是
函数原型
。我说的对吗?编译器使用函数原型进行错误检查和自动类型转换。它们没有放在对象文件中,链接器也没有使用它们。你可以阅读这个@SouravGhosh,我相信你是对的,它应该是转发声明。在许多在线教程中,函数原型似乎已经成为转发声明的同义词,而实际上它们是两个独立的东西。我会更新question@user3386109那么转发声明只在c编译的错误检查过程中使用?
enum kvpErr kvpAdd (char *key, char *value);