繁体   English   中英

为什么 header 足以定义?

[英]Why is header including sufficient for definitions?

据我了解; 头文件声明的东西。 现在包括 header 文件,如 #include iostream 包括 header 文件 iostream.h。 例如,这告诉编译器“有一个东西叫做:cout”。 问题:编译器如何获得 cout(或所有其他函数)的定义? 以我的理解,编译器只知道名称和类型,但不知道定义。 提前致谢。

实际上:它没有。 它需要知道对象的外观、它们提供的接口(因此对于std::cout来说,这是一个std::ostream stream object 的子类)并且此类对象确实存在于某处 就是这样。 编译器然后为 object 添加占位符——就像它为 function 调用所做的那样。

编译后有第二个单元:linker。顾名思义,它将所有这些编译单元链接在一起。 如果它现在看到这样的占位符,它将用 object 或 function 的地址替换它——当然这必须存在(对于std::cout ,在 header 中有一个extern声明,但其他一些源文件必须已经实现它没有extern - 如果在某些库中预编译),否则会抛出 linker 错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM