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

Tra*_*net 2 c++ c++11

考虑一个文件functions.cpp

// functions.cpp

void f1(){/* do something */}

void f2()
{
    f1();
}
Run Code Online (Sandbox Code Playgroud)

我希望f2在不同的 cpp 文件中使用该函数,因此我创建了一个头文件functions.h

// functions.h

#ifndef F2
#define F2

void f2();

#endif
Run Code Online (Sandbox Code Playgroud)

现在,该main.cpp文件是我调用的地方f2

// main.cpp

#include "functions.h"

int main()
{
    f2();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译这个工作正常,但我没有f1functions.h. 那么什么时候f2被调用,编译器怎么知道f1呢?

Bri*_*ian 5

main.cpp被转换,外部基准被生成以该函数f2。粗略地说,这意味着编译器生成的目标文件包含在某个地址调用函数的指令,并留下元数据告诉链接器填写f2. 另外,编译器翻译functions.cpp并在内部解析来自f2to的引用,f1并发出一个包含f2. 然后,链接器看到包含 的目标文件f2和需要 的地址的目标文件f2,将它们“链接”到一个可执行文件中。因此, 的调用者f2不需要知道 使用的任何实体的声明f2