考虑一个文件functions.cpp:

// functions.cpp

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

void f2()
{
    f1();
}

我希望在其他cpp文件中使用函数f2,因此我创建了头文件functions.h:
// functions.h

#ifndef F2
#define F2

void f2();

#endif

现在,main.cpp文件是我称为f2的位置:
// main.cpp

#include "functions.h"

int main()
{
    f2();
    return 0;
}

编译它工作正常,但是我没有在f1中声明functions.h。因此,当调用f2时,编译器如何知道f1

最佳答案

翻译main.cpp时,将生成对f2函数的外部引用。粗略地说,这意味着由编译器生成的目标文件包含在特定地址调用函数的指令,而留下元数据告诉链接器填写f2的实际地址。另外,编译器会转换functions.cpp并在内部将引用从f2解析为f1,并发出包含f2定义的目标文件。然后,链接器看到包含f2的目标文件和需要f2地址的目标文件,将它们“链接”在一起成为可执行文件。因此,f2的调用者不需要知道f2使用的任何实体的声明。

关于c++ - 内部函数是否在C++中自动声明?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61175496/

10-12 20:12