華為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