extern關(guān)鍵字可以用來聲明變量和函數(shù)作為外部變量或者函數(shù)供其它文件使用。
extern聲明變量
示例程序:
test.h如下:
//聲明
extern int a;
extern int b;
test.c如下:
#include "test.h"
//定義
int a = 520;
int b = 1314;
主函數(shù)所在的源文件為main.c,其代碼如下:
#include <stdio.h>
#include "test.h"
int main(void)
{
printf("a = %d , b = %d\n", a, b);
return 0;
}
其中,a,b的聲明也可放在main.c中,代碼如下:
#include <stdio.h>
extern int a;
extern int b;
int main(void)
{
printf("a = %d , b = %d\n", a, b);
return 0;
}
此時,就不需要包含test.h這個頭文件了。
extern聲明函數(shù)
示例程序:
test.h如下:
//聲明變量
extern int a;
extern int b;
//函數(shù)聲明
extern int add(int a, int b); //extern關(guān)鍵字可要可不要
test.c如下:
#include "test.h"
//定義
int a = 520;
int b = 1314;
int add(int a, int b)
{
return a + b;
}
main.c如下:
#include <stdio.h>
#include "test.h"
int main(void)
{
printf("a = %d , b = %d\n", a, b);
printf("add(a, b) = %d\n", add(a, b));
return 0;
}
同上,函數(shù)的聲明也可以放在其被調(diào)用的源文件中,即:
#include <stdio.h>
//聲明變量
extern int a;
extern int b;
//函數(shù)聲明
extern int add(int a, int b); //extern關(guān)鍵字可要可不要
int main(void)
{
printf("a = %d , b = %d\n", a, b);
printf("add(a, b) = %d\n", add(a, b));
return 0;
}
程序運行結(jié)果為:
extern “C”
extern "C"的主要作用就是為了能夠正確實現(xiàn)C++代碼調(diào)用其他C語言代碼。加上extern "C"后,會指示編譯器這部分代碼按C語言的進行編譯,而不是C++的。
因為在C++出現(xiàn)以前,很多代碼都是C語言寫的,而且很底層的庫也是C語言寫的,為了更好的支持原來的C代碼和已經(jīng)寫好的C語言庫,需要在C++中盡可能的支持C,而extern "C"就是其中的一個策略。
示例代碼:
#ifndef __TEST_H /*防止該頭文件被重復引用*/
#define __TEST_H
#ifdef __cplusplus
extern "C"{
#endif
/*…*/
#ifdef __cplusplus
}
#endif
#endif /*end of __TEST_H*/
__cplusplus為C++定義的一個宏,此時extern “C”后的部分的代碼按C語言的格式進行編譯,而不是C++。
以上是extern關(guān)鍵字的三種用法,如有錯誤,歡迎指出!
關(guān)注我的微信公眾號【嵌入式大雜燴】,回復:C語言,可獲取C語言資料。
關(guān)注我的個人博客【我的博客】查看更多筆記
