考虑一个文件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/