溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++中extern關(guān)鍵字的作用是什么

發(fā)布時(shí)間:2022-04-14 11:03:30 來源:億速云 閱讀:601 作者:iii 欄目:編程語(yǔ)言

本篇內(nèi)容主要講解“C++中extern關(guān)鍵字的作用是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C++中extern關(guān)鍵字的作用是什么”吧!

C/C++ 中extern關(guān)鍵字詳解

在C/C++編程過程中,經(jīng)常會(huì)進(jìn)行變量和函數(shù)的聲明和定義,各個(gè)模塊間共用同一個(gè)全局變量時(shí),此時(shí)extern就派上用場(chǎng)了。

定義

extern可以置于變量或者函數(shù)前,以標(biāo)示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時(shí)在其他模塊中尋找其定義,不需要分配內(nèi)存,直接使用。

推薦:在.h中聲明,因?yàn)樵陬^文件定義的話,其他模塊include此頭文件,就會(huì)報(bào)重復(fù)定義錯(cuò)誤

實(shí)驗(yàn)結(jié)論

1、在.h中聲明  extern int g_a;  在.c中定義 int g_a=1;
 在兩個(gè)其他文件中引入.h  g_a就是唯一的

2、在.h中聲明  int g_a;  在.c中定義 int g_a=1;
 在兩個(gè)其他文件中引入.h  g_a就是唯一的

3、在.h中定義 int g_a =1;   -----報(bào)錯(cuò)
 在兩個(gè)其他文件中引入.h  g_a就是重復(fù)定義了

實(shí)驗(yàn)內(nèi)容

有 testa.h、test.c、main.c 三個(gè)文件

實(shí)驗(yàn)1:在.h中聲明   extern int g_a;   在.c中定義 int g_a=1;

testa.h文件

#ifndef TESTAH
#define TESTAH
 extern int g_a;
#endif
testa.c文件

#include "../include/testa.h"
int g_a = 1;
void setA(int m)
{
 g_a = m;
}

int getA()
{
 return g_a;
}
main.c文件

#include<stdio.h>
#include "../include/testa.h"

int main()
{
 setA(5);
 printf("g_a:%d\n",g_a);
 return 0;
}

    編譯:gcc  testa.c main.c    輸出:g_a:5

實(shí)驗(yàn)2:在.h中聲明   int g_a;   在.c中定義 int g_a=1;

    只是將實(shí)驗(yàn)1中的testa.h的extern關(guān)鍵字去掉

    編譯:gcc  testa.c main.c    輸出:g_a:5

實(shí)驗(yàn)3: 在.h中定義  int g_a =1;

testa.h文件

#ifndef TESTAH
#define TESTAH
 int g_a = 1;
#endif

testa.c文件

#include "../include/testa.h"

void setA(int m)
{
 g_a = m;
}

int getA()
{
 return g_a;
}

main.c文件

#include<stdio.h>
#include "../include/testa.h"

int main()
{
 setA(5);
 printf("g_a:%d\n",g_a);
 return 0;
}

編譯報(bào)錯(cuò):

/tmp/ccja3SvL.o:(.data+0x0): multiple definition of `g_a'
/tmp/cczZlYh9.o:(.data+0x0): first defined here
collect2: error: ld returned 1 exit status

總結(jié)

     1、變量和函數(shù)的定義最好不要在頭文件中定義,因?yàn)楫?dāng)此頭文件在其他文件中#include進(jìn)去后,編譯器會(huì)認(rèn)為變量定義了兩次,報(bào)錯(cuò)。

    2、變量和函數(shù)的聲明放在頭文件中(實(shí)驗(yàn)發(fā)現(xiàn)前面有沒有extern關(guān)鍵字修飾都可以),這樣可以讓其他模塊使用此變量和函數(shù)。

        在其他引入此頭文件的.c或者.cpp文件中,也可以通過加入extern 變量或函數(shù)聲明,告訴編譯器是外部引用。也可以不在聲明,直接使用。

到此,相信大家對(duì)“C++中extern關(guān)鍵字的作用是什么”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI