extern 是C和C++中的關鍵字,用于聲明一個變量或函數的存在,但不進行定義。
它通常用于在一個源文件中引用另一個源文件中定義的變量或函數。 例如,extern int x; 表示 x 是一個整數變量,但它的實際定義將在其他文件中。在引用它的文件中,編譯器會在鏈接階段查找 x 的定義。 在函數聲明中使用 extern 也是合法的,例如 extern void myFunction(); 表示 myFunction 是一個函數,但它的實際定義將在其他文件中。 總體而言,extern 的主要作用是告訴編譯器某個變量或函數的定義存在,但是不在當前文件中。
當你在一個源文件中聲明了一個變量或函數為 extern
,而其定義在另一個源文件中時,這就是 extern
的典型用法。以下是一個示例: 假設你有兩個源文件:file1.c
和 file2.c
。
file1.c:
// file1.c
#include <stdio.h>
// 聲明變量 x 為外部變量
extern int x;
int main() {// 輸出外部變量 x 的值printf("The value of x is: %d\\\\n", x);return 0;
}
file2.c:
// file2.c
// 定義外部變量 x
int x = 42;
在這個例子中,file1.c
中通過 extern int x;
聲明了變量 x
的存在,但是并沒有對它進行定義。然后,在 file2.c
中定義了變量 x
的值為 42
。在編譯時,編譯器會將這兩個文件編譯成目標文件,然后鏈接器會將它們合并在一起。最終,運行 file1
可執行文件時,會輸出 The value of x is: 42
。
當你需要在不同的源文件中共享變量或函數時,extern
?是一個很有用的工具。例如,如果你有一個全局變量需要在多個文件中訪問,可以在其中一個文件中定義該變量,然后在其他文件中使用?extern
?來聲明該變量的存在。這樣,所有文件都可以訪問和使用這個全局變量,而不需要在每個文件中都定義一次。
另外,extern
?也可以用于在一個源文件中引用另一個源文件中定義的函數。例如,如果你有一個函數定義在另一個文件中,但是需要在當前文件中調用該函數,可以使用?extern
?來聲明該函數的存在,使得編譯器能夠正確地解析函數調用。