轉載請註明出處:http://blog.csdn.net/muge0913/article/details/7311082
華為C語言面試題
如何引用一個已經定義過的全域變數?
答:extern
可以用引用標頭檔的方式,也可以用extern關鍵字,如果用引用標頭檔方式來引用某個在標頭檔中聲明的全域變理,假定你將那個變數寫錯了,那麼在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那麼在編譯期間不會報錯,而在串連期間報錯
3. 此外,extern修飾符可用於指示C或者C++函數的調用規範。比如在C++中調用C庫函數,就需要在C++程式中用extern “C”聲明要引用的函數。這是給連結器用的,告訴連結器在連結的時候用C函數規範來連結。主要原因是C++和C程式編譯完成後在目標代碼中命名規則不同
1.extern用在變數聲明中常常有這樣一個作用,你在*.c檔案中聲明了一個全域的變數,這個全域的變數如果要被引用,就放在*.h中並用extern來聲明。
2.如果函數的聲明中帶有關鍵字extern,僅僅是暗示這個函數可能在別的源檔案裡定義,沒有其它作用。即下述兩個函式宣告沒有區別:
extern void print_externifo(); 和voidprint_externifo();
extern在 函數中的使用:
如果定義函數的c/cpp檔案在對應的標頭檔中聲明了定義的函數,那麼在其他c/cpp檔案中要使用這些函數,只需要包含這個標頭檔即可。
如果你不想包含標頭檔,那麼在c/cpp中聲明該函數。一般來說,聲明定義在本檔案的函數不用“extern”,聲明定義在其他檔案中的函數用“extern”,這樣在本檔案中調用別的檔案定義的函數就不用包含標頭檔include“*.h”來聲明函數,聲明後直接使用即可。
舉個例子:
#vimprint_extern.c#include <stdio.h>extern void print_extern()//這裡用不用extern都可以{ printf("helloextern test!!\n");}#vim extern_test.c#include <stdio.h> extern void print_extern();//其實這裡用不用extern都是可以的main(){ print_extern();}
編譯:
#gcc –c print_extern.c –o print_extern.o#gcc print_extern.o extern_test.c –o extern_test#./extern_test