什么是关于记忆的前瞻性声明?

use*_*005 -5 c c++ memory-model

我在高层次上理解函数声明的作用:在文件的顶部声明它们,以便编译器知道您正在调用哪些函数.但是,编译器究竟做了什么呢?我知道函数是写在内存的文本部分,并期望参数由堆栈上的寄存器给出.功能原型是否也放在文本中?或者是前向声明只是链接编辑器用于将所有文件连接在一起的指示器,它们在最终产品中被"删除"了吗?或者编译器是否对它们做了其他事情?

我在网上看了一下,找不到一个好的资源,所以如果你们中的任何人都可以回答这个问题,或者给我一个概述这个特定现象的资源,那将非常感谢!

编辑

我认为这个问题存在误解,这是我的错误.我的问题是C编译器如何使用前向声明.从下面的答案看来,它是在将c代码转换为汇编时使用的.它是否正确?

pax*_*blo 8

函数原型是一个简单的方法来通知有关编译器如何的功能应该被调用,而不必提供有关执行任何细节.

调用者需要知道的是如何调用它:要传递的参数和预期的内容.

其他所有内容都应尽可能隐藏,以便进行适当的封装,使功能能够在内部进行更改,而不会破坏当前使用它的任何人.

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

enum kvpErr kvpAdd (char *key, char *value);
Run Code Online (Sandbox Code Playgroud)

这允许编译器,以确保您实际上通过两个C字符串,并采取不可或缺的错误代码回来.但它没有揭示该功能的内部结构.它可以使用各种形式的平衡树,动态分配的数组,与SQL数据库的连接或位于外蒙古的NFS服务器上的文本文件.

最重要的是,只要函数签名本身保持相同,您就可以以任何方式改进实现.