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

时间:2014-12-15 06:39:01

标签: c++ c memory-model

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

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

修改

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

1 个答案:

答案 0 :(得分:8)

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

调用者需要知道的是如何调用它:要传递什么参数以及期待什么。

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

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

enum kvpErr kvpAdd (char *key, char *value);

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

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