有這樣的代碼:差異與extern和沒有它
#include <iostream>
extern void fun();
int main(){
fun();
return 0;
}
void fun(){ std::cout << "Hello" << std::endl; }
是否有聲明之間存在差異:
extern void fun();
void fun();
?上面的代碼與extern和extern關鍵字的行爲相同。
有這樣的代碼:差異與extern和沒有它
#include <iostream>
extern void fun();
int main(){
fun();
return 0;
}
void fun(){ std::cout << "Hello" << std::endl; }
是否有聲明之間存在差異:
extern void fun();
void fun();
?上面的代碼與extern和extern關鍵字的行爲相同。
函數聲明確實有external linkage默認情況下,所以加入extern
關鍵字函數聲明沒有區別,它是多餘的。
兩種說法之間的區別是:
extern void fun();
告訴編譯器和鏈接器在另一個文件中查找時,此文件中的代碼指的是樂趣(),也許是通過調用樂趣();這種生產被稱爲「聲明」。
void fun () {
...
}
定義的函數fun()和,因爲它在該文件中定義,避免了需要鏈接器查找功能的其他地方。
有沒有在聲明函數extern沒有壞處:鏈接做正確的事。
'告訴編譯器和鏈接器在該文件中的代碼引用fun()時看另一個文件()' 我不認爲這是正確的。編譯器將產生用於'extern'類型說明符的函數調用_irrespectively_的佔位符值。 作爲正確答案說明,'extern'符是多餘的。 如果編譯器會被自己這樣做會incoporate連接邏輯。鏈接器作業是通過符號表並通過函數的最終地址解析佔位符值。 – SebNag
當「extern」應用於函數原型時,沒有區別 – Arunmu