繁体   English   中英

内部函数是否在 C++ 中自动声明?

[英]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.

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