簡體   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