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