[英]Are inner functions automatically declared in C++?
考虑一个文件functions.cpp
:
// functions.cpp
void f1(){/* do something */}
void f2()
{
f1();
}
我希望在不同的 cpp 文件中使用 function f2
,所以我创建了一个 header 文件functions.h
:
// functions.h
#ifndef F2
#define F2
void f2();
#endif
现在, main.cpp
文件是我调用f2
的地方:
// main.cpp
#include "functions.h"
int main()
{
f2();
return 0;
}
编译它工作正常,但我没有在functions.h
中声明f1
。 那么当f2
被调用时,编译器是如何知道f1
的呢?
翻译main.cpp
时,会生成对 function f2
的外部引用。 粗略地说,就是编译器生成的object文件中包含了在某个地址调用function的指令,留下元数据告诉linker填写f2
的实际地址。 另外,编译器翻译functions.cpp
并在内部将引用从f2
解析为f1
并发出包含f2
定义的 object 文件。 然后是 linker,看到包含f2
的 object 文件和需要f2
地址的 object 文件,将它们“链接”在一起成为可执行文件。 因此, f2
的调用者不需要知道f2
使用的任何实体的声明。
void f1(){/* do something */}
既是f1
的声明又是定义,它对f2
可见。 源文件是自上而下解析的。 所以f2
拥有它所需要的一切,并且f2
的调用者不需要知道f1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.