最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年06月02日 14:34:18   投稿:lqh  
這篇文章主要介紹了C/C++ 中extern關(guān)鍵字詳解的相關(guān)資料,需要的朋友可以參考下

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

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

定義

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

推薦:在.h中聲明,因為在頭文件定義的話,其他模塊include此頭文件,就會報重復(fù)定義錯誤

實驗結(jié)論

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

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

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

實驗內(nèi)容

有 testa.h、test.c、main.c 三個文件

實驗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

實驗2:在.h中聲明   int g_a;   在.c中定義 int g_a=1;

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

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

實驗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;
}

編譯報錯:

/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ù)的定義最好不要在頭文件中定義,因為當(dāng)此頭文件在其他文件中#include進(jìn)去后,編譯器會認(rèn)為變量定義了兩次,報錯。

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

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

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Qt使用QChart實現(xiàn)靜態(tài)顯示溫度變化曲線

    Qt使用QChart實現(xiàn)靜態(tài)顯示溫度變化曲線

    QChart模塊是Qt?Charts庫的基礎(chǔ),提供了用于創(chuàng)建和顯示各種類型圖表的類和接口,本文主要介紹了如何使用QChart實現(xiàn)動態(tài)顯示3個設(shè)備的溫度變化曲線,感興趣的可以了解一下
    2023-06-06
  • C++函數(shù)參數(shù)匹配規(guī)則示例小結(jié)

    C++函數(shù)參數(shù)匹配規(guī)則示例小結(jié)

    這篇文章主要介紹了C++函數(shù)參數(shù)匹配規(guī)則,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • C++ Eigen庫實現(xiàn)最小二乘擬合的示例代碼

    C++ Eigen庫實現(xiàn)最小二乘擬合的示例代碼

    Eigen 是一個線性算術(shù)的 C++ 模板庫,功能強大、快速、優(yōu)雅以及支持多平臺,本文主要為大家介紹了C++利用Eigen庫實現(xiàn)最小二乘擬合的示例代碼,希望對大家有所幫助
    2023-07-07
  • C語言自定義類型的保姆級講解

    C語言自定義類型的保姆級講解

    這篇文章主要給大家介紹了關(guān)于C語言自定義類型的保姆級講解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C語言編寫基于TCP和UDP協(xié)議的Socket通信程序示例

    C語言編寫基于TCP和UDP協(xié)議的Socket通信程序示例

    這篇文章主要介紹了C語言編寫基于TCP和UDP協(xié)議的Socket通信程序示例,其中TCP的客戶端與服務(wù)器端采用多線程實現(xiàn),需要的朋友可以參考下
    2016-03-03
  • C語言中volatile關(guān)鍵字的深入講解

    C語言中volatile關(guān)鍵字的深入講解

    在程序設(shè)計中,尤其是在C語言、C++、C#和Java語言中,使用volatile關(guān)鍵字聲明的變量或?qū)ο笸ǔ>哂信c優(yōu)化、多線程相關(guān)的特殊屬性,這篇文章主要給大家介紹了關(guān)于C語言volatile關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • C++實現(xiàn)LeetCode(132.拆分回文串之二)

    C++實現(xiàn)LeetCode(132.拆分回文串之二)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(132.拆分回文串之二),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++基礎(chǔ)入門教程(四):枚舉和指針

    C++基礎(chǔ)入門教程(四):枚舉和指針

    這篇文章主要介紹了C++基礎(chǔ)入門教程(四):枚舉和指針,本文重點講解了指針,有幽默搞笑的語言描述了指針,需要的朋友可以參考下
    2014-11-11
  • 數(shù)據(jù)結(jié)構(gòu)與算法中二叉樹子結(jié)構(gòu)的詳解

    數(shù)據(jù)結(jié)構(gòu)與算法中二叉樹子結(jié)構(gòu)的詳解

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法中二叉樹子結(jié)構(gòu)的詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C語言深入探索動態(tài)內(nèi)存分配的使用

    C語言深入探索動態(tài)內(nèi)存分配的使用

    給數(shù)組分配多大的空間?你是否和初學(xué)C時的我一樣,有過這樣的疑問。這一期就來聊一聊動態(tài)內(nèi)存的分配,讀完這篇文章,你可能對內(nèi)存的分配有一個更好的理解
    2022-04-04

最新評論

平邑县| 许昌县| 兰州市| 定安县| 长葛市| 肥西县| 姚安县| 阿克苏市| 同江市| 盖州市| 巧家县| 舟山市| 龙海市| 射洪县| 霞浦县| 平顶山市| 大港区| 怀远县| 蒙城县| 吴忠市| 吴江市| 京山县| 佛山市| 莱州市| 天等县| 兖州市| 镇平县| 景德镇市| 灌云县| 拜城县| 洛阳市| 张家港市| 平遥县| 安顺市| 黄石市| 神池县| 沂南县| 和硕县| 通河县| 崇左市| 安西县|