欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C語言正確使用extern關(guān)鍵字

 更新時間:2019年04月29日 14:43:42   作者:xingjiarong  
這篇文章主要介紹了C語言正確使用extern關(guān)鍵字,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

利用關(guān)鍵字extern,可以在一個文件中引用另一個文件中定義的變量或者函數(shù),下面就結(jié)合具體的實例,分類說明一下。

一、引用同一個文件中的變量

#include<stdio.h>

int func();

int main()
{
  func(); //1
  printf("%d",num); //2
  return 0;
}

int num = 3;

int func()
{
  printf("%d\n",num);
}

如果按照這個順序,變量 num在main函數(shù)的后邊進行聲明和初始化的話,那么在main函數(shù)中是不能直接引用num這個變量的,因為當編譯器編譯到這一句話的時候,找不到num這個變量的聲明,但是在func函數(shù)中是可以正常使用,因為func對num的調(diào)用是發(fā)生在num的聲明和初始化之后。

如果我不想改變num的聲明的位置,但是想在main函數(shù)中直接使用num這個變量,怎么辦呢?可以使用extern這個關(guān)鍵字。像下面這一段代碼,利用extern關(guān)鍵字先聲明一下num變量,告訴編譯器num這個變量是存在的,但是不是在這之前聲明的,你到別的地方找找吧,果然,這樣就可以順利通過編譯啦。但是你要是想欺騙編譯器也是不行的,比如你聲明了extern int num;但是在后面卻沒有真正的給出num變量的聲明,那么編譯器去別的地方找了,但是沒找到還是不行的。

下面的程序就是利用extern關(guān)鍵字,使用在后邊定義的變量。

#include<stdio.h>

int func();

int main()
{
  func(); //1
  extern int num;
  printf("%d",num); //2
  return 0;
}

int num = 3;

int func()
{
  printf("%d\n",num);
}

二、引用另一個文件中的變量

如果extern這個關(guān)鍵字就這點功能,那么這個關(guān)鍵字就顯得多余了,因為上邊的程序可以通過將num變量在main函數(shù)的上邊聲明,使得在main函數(shù)中也可以使用。
extern這個關(guān)鍵字的真正的作用是引用不在同一個文件中的變量或者函數(shù)。

main.c

#include<stdio.h>

int main()
{
  extern int num;
  printf("%d",num);
  return 0;
}

b.c

#include<stdio.h>

int num = 5;

void func()
{
  printf("fun in a.c");
}

例如,這里b.c中定義了一個變量num,如果main.c中想要引用這個變量,那么可以使用extern這個關(guān)鍵字,注意這里能成功引用的原因是,num這個關(guān)鍵字在b.c中是一個全局變量,也就是說只有當一個變量是一個全局變量時,extern變量才會起作用,向下面這樣是不行的。

mian.c

#include<stdio.h>

int main()
{
  extern int num;
  printf("%d",num);
  return 0;
}

b.c

#include<stdio.h>

void func()
{
  int num = 5;
  printf("fun in a.c");
}

另外,extern關(guān)鍵字只需要指明類型和變量名就行了,不能再重新賦值,初始化需要在原文件所在處進行,如果不進行初始化的話,全局變量會被編譯器自動初始化為0。像這種寫法是不行的。

extern int num=4;

但是在聲明之后就可以使用變量名進行修改了,像這樣:

#include<stdio.h>

int main()
{
  extern int num;
  num=1;
  printf("%d",num);
  return 0;
}

如果不想這個變量被修改可以使用const關(guān)鍵字進行修飾,寫法如下:

mian.c

#include<stdio.h>

int main()
{
  extern const int num;
  printf("%d",num);
  return 0;
}

b.c

#include<stdio.h>

const int num=5;
void func()
{
  printf("fun in a.c");
}

使用include將另一個文件全部包含進去可以引用另一個文件中的變量,但是這樣做的結(jié)果就是,被包含的文件中的所有的變量和方法都可以被這個文件使用,這樣就變得不安全,如果只是希望一個文件使用另一個文件中的某個變量還是使用extern關(guān)鍵字更好。

三、引用另一個文件中的函數(shù)

extern除了引用另一個文件中的變量外,還可以引用另一個文件中的函數(shù),引用方法和引用變量相似。

mian.c

#include<stdio.h>

int main()
{
  extern void func();
  func();
  return 0;
}

b.c

#include<stdio.h>

const int num=5;
void func()
{
  printf("fun in a.c");
}

這里main函數(shù)中引用了b.c中的函數(shù)func。因為所有的函數(shù)都是全局的,所以對函數(shù)的extern用法和對全局變量的修飾基本相同,需要注意的就是,需要指明返回值的類型和參數(shù)。

以上所述是小編給大家介紹的C語言正確使用extern關(guān)鍵字詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • C++實踐IP地址類項目參考

    C++實踐IP地址類項目參考

    今天小編就為大家分享一篇關(guān)于C++實踐IP地址類項目參考,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 詳解C++中四種類型的轉(zhuǎn)換

    詳解C++中四種類型的轉(zhuǎn)換

    這篇文章主要是想和大家一起聊聊來C++中的四種類型轉(zhuǎn)換?:const_cast、static_cast、reinterpret_cast和dynamic_cast,感興趣的可以了解一下
    2022-12-12
  • C語言打印輸出楊輝三角

    C語言打印輸出楊輝三角

    這篇文章主要為大家詳細介紹了C語言打印輸出楊輝三角,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++嵌入式內(nèi)存管理詳情

    C++嵌入式內(nèi)存管理詳情

    這篇文章主要介紹了C++嵌入式內(nèi)存管理,是對上一篇內(nèi)存的一個補充,主要講解Linux中的內(nèi)存;這部分對于一些端側(cè)部署的伙伴來說比較重要,推薦針對不同的板子,下面來看看詳細內(nèi)容吧,需要的朋友可以參考一下
    2021-12-12
  • C++中繼承基類與派生類的區(qū)別

    C++中繼承基類與派生類的區(qū)別

    這篇文章主要介紹了C++中繼承基類與派生類的區(qū)別,面向?qū)ο蟪绦蛟O計中最重要的一個概念是繼承。繼承允許我們依據(jù)另一個類來定義一個類,這使得創(chuàng)建和維護一個應用程序變得更容易,需要的朋友可以參考下
    2023-05-05
  • 詳解C++中的指針結(jié)構(gòu)體數(shù)組以及指向結(jié)構(gòu)體變量的指針

    詳解C++中的指針結(jié)構(gòu)體數(shù)組以及指向結(jié)構(gòu)體變量的指針

    這篇文章主要介紹了C++中的指針結(jié)構(gòu)體數(shù)組以及指向結(jié)構(gòu)體變量的指針的用法,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09
  • C語言數(shù)據(jù)結(jié)構(gòu)實現(xiàn)鏈表逆序并輸出

    C語言數(shù)據(jù)結(jié)構(gòu)實現(xiàn)鏈表逆序并輸出

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)實現(xiàn)鏈表逆序并輸出的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Visual Studio調(diào)試C/C++教程指南

    Visual Studio調(diào)試C/C++教程指南

    VisualStudio是微軟開發(fā)的一款集成開發(fā)環(huán)境軟件,本文主要介紹了Visual Studio調(diào)試C/C++教程指南,熟悉地掌握基于VS的C/C++調(diào)試技術(shù),可以大幅提升調(diào)試性能,感興趣的可以了解一下
    2024-06-06
  • C語言一個函數(shù)如何實現(xiàn)好幾個return返回值

    C語言一個函數(shù)如何實現(xiàn)好幾個return返回值

    本文主要介紹了C語言一個函數(shù)如何實現(xiàn)好幾個return返回值,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • 探討register關(guān)鍵字在c語言和c++中的差異

    探討register關(guān)鍵字在c語言和c++中的差異

    建議不要用register關(guān)鍵字定義全局變量,因為全局變量的生命周期是從執(zhí)行程序開始,一直到程序結(jié)束才會終止,而register變量可能會存放在cpu的寄存器中,如果在程序的整個生命周期內(nèi)都占用著寄存器的話,這是個相當不好的舉措
    2013-10-10

最新評論