【C語言學習】extern關(guān)鍵字的作用是什么?

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)注我的個人博客【我的博客】查看更多筆記

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容