c語言怎麼定義外部變數,c語言使用外部變數

本文目錄一覽:

C語言關於外部變數聲明與定義

不要在共同include的頭文件里定義。

把變數定義在其中一個C文件又或者只有它才用的頭文件里。例如

int share;

然後在其他要用的C文件中使用

extern int share;

來聲明。

c語言,變數的定義和使用

變數的聲明有兩種情況:

1、一種是需要建立存儲空間的。例如:int a 在聲明的時候就已經建立了存儲空間。

2、另一種是不需要建立存儲空間的。 例如:extern int a 其中變數a是在別的文件中定義的。

前者是「定義性聲明(defining declaration)」或者稱為「定義(definition)」,而後者是「引用性聲明(referncing declaration)」,從廣義的角度來講聲明中包含著定義,即定義是聲明的一個特例,所以並非所有的聲明都是定義,例如:int a 它既是聲明,同時又是定義。然而對於 extern a 來講它只是聲明不是定義。一般的情況下我們常常這樣敘述,把建立空間的聲明稱之為「定義」,而把不需要建立存儲空間的聲明稱之為「聲明」。很明顯我們在這裡指的聲明是範圍比較窄的,即狹義上的聲明,也就是說非定義性質的聲明,例如:在主函數中:

int main() {

extern int A;

//這是個聲明而不是定義,聲明A是一個已經定義了的外部變數

//注意:聲明外部變數時可以把變數類型去掉如:extern A;

dosth(); //執行函數

}

int A; //是定義,定義了A為整型的外部變數

外部變數的「定義」與外部變數的「聲明」是不相同的,外部變數的定義只能有一次,它的位置是在所有函數之外,而同一個文件中的外部變數聲明可以是多次的,它可以在函數之內(哪個函數要用就在那個函數中聲明)也可以在函數之外(在外部變數的定義點之前)。系統會根據外部變數的定義(而不是根據外部變數的聲明)分配存儲空間的。對於外部變數來講,初始化只能是在「定義」中進行,而不是在「聲明」中。所謂的「聲明」,其作用,是聲明該變數是一個已在後面定義過的外部變數,僅僅是為了「提前」引用該變數而作的「聲明」而已。extern 只作聲明,不作任何定義。

(我們聲明的最終目的是為了提前使用,即在定義之前使用,如果不需要提前使用就沒有單獨聲明的必要,變數是如此,函數也是如此,所以聲明不會分配存儲空間,只有定義時才會分配存儲空間。)

用static來聲明一個變數的作用有二:

(1)對於局部變數用static聲明,則是為該變數分配的空間在整個程序的執行期內都始終存在。

(2)外部變數用static來聲明,則該變數的作用只限於本文件模塊。

如何在c語言中定義及引用全局變數?

1、全局變數也稱為外部變數,它是在函數外部定義的變數。

它不屬於哪一個函數,它屬於一個源程序文件。其作用域是整個源程序。在函數中使用全局變數,一般應作全局變數說明。

只有在函數內經過說明的全局變數才能使用。全局變數的說明符為extern。

但在一個函數之前定義的全局變數,在該函數內使用可不再加以說明。外部變數是在函數外部定義的全局變數,它的作用域是從變數的定義處開始,到本程序文件的

結尾。在此作用域內,全局變數可為各個函數所引用。編譯時將外部變數分配在靜態存儲區。

有時需要在其他文件中使用extern來聲明外部變數,以擴展外部變數的作用域。

也可用static聲明外部變數,使該變數不能被其他文件引用。有時候他們是一樣的,只有稍微一點的區別而已,不用太過於區分的。

2、定義及引用方法:

#ifdef xxx_GLOBALS

#define xxx_EXT#else#define xxx_EXT extern

#endif 上面位於.H 文件中,每個全局變數都加上了xxx_EXT的前綴,xxx代表模塊的名字。該模塊的.C文件中有以下定義:#define xxx_GLOBALS

當編譯器處理.C文件時,它強制xxx_EXT(在相應.H文件中可以找到)為空,(因為xxx_GLOBALS已經定義)。所以編譯器給每個全局變數分配內存空間,而當編譯器處理其他.C文件時,xxx_GLOBAL沒有定義,xxx_EXT被定義為extern,這樣用戶就可以調用外部全局變數。進階:在abc.H:#ifdef abc_GLOBALS

#define abc_EXT#else

#define abc_EXT extern#endif

abc_EXT unsigned int Ctr;

同時,abc.H有中以下定義:#define abc_GLOBALS

當編譯器處理abc.C時,它使得頭文件變成如下所示,因為abc_EXT被設置為空。unsigned int Ctr;

這樣編譯器就會將這些全局變數分配在內存中。當編譯器處理其他.C文件時,頭文件變成了如下的樣子,因為abc_GLOBAL沒有定義,所以abc_EXT被定義為extern。extern unsigned int Ctr;

在這種情況下,不產生內存分配,而任何 .C文件都可以使用這些變數。這樣的就只需在 .H 文件中定義一次就可以了。

c語言:什麼是外部變數

外部變數 是在 函數 外部定義的全局變數,它的 作用域 是從變數的定義處開始,到本 程序文件 的結尾。在此 作用域 內,全局變數可為各個 函數 所引用。編譯時將 外部變數 分配在靜態存儲區。

有時要用extern來聲明 外部變數 ,以擴展外部變數的 作用域 。 也可用static聲明外部變數,使該變數不能被其他文件引用。

用extern聲明外部變數

extern可省略不寫。

本文件里:在一個文件里,有不止一個 函數 ,外部變數在第一個函數後面定義。若用extern在第一個函數前聲明該變數則該變數可以在第一個函數中使用。

多個文件中:在其他文件中若想要用該文件中已聲明的變數,則在文件頭部聲明該變數,即可在文件中使用。

用static聲明外部變數

static聲明後該外部變數就只能在本文件中使用。

C語言關於外部變數

一般不把這兩句放在同一個源文件里。

第一個是一個變數的定義,第二個是變數的聲明。

在文件a.c中定義一個USER login_user;但是在文件b.c中要用到這個全局變數,就採用聲明的方法,extern USER login_user;來告訴編譯器,我需要用一個變數login_user;但是這個變數已經在別的文件中定義了——就這個意思。

聲明和變數定義的關係

一般在函數調用裡面

int func1(int a,int b)

{……}

int func2(……)

{

……

int x=1;

int y=2

func(x,y);

……

}

上面的x和y就是定義。而a和b就是聲明。

原創文章,作者:WIMXH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/325125.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
WIMXH的頭像WIMXH
上一篇 2025-01-13 13:23
下一篇 2025-01-13 13:23

相關推薦

  • int類型變數的細節與注意事項

    本文將從 int 類型變數的定義、聲明、初始化、範圍、運算和類型轉換等方面,對 int 類型變數進行詳細闡述和講解,幫助讀者更好地掌握和應用 int 變數。 一、定義與聲明 int…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • Python input參數變數用法介紹

    本文將從多個方面對Python input括弧里參數變數進行闡述與詳解,並提供相應的代碼示例。 一、基本介紹 Python input()函數用於獲取用戶輸入。當程序運行到inpu…

    編程 2025-04-29
  • Python符號定義和使用方法

    本文將從多個方面介紹Python符號的定義和使用方法,涉及注釋、變數、運算符、條件語句和循環等多個方面。 一、注釋 1、單行注釋 # 這是一條單行注釋 2、多行注釋 “”” 這是一…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python中的隊列定義

    本篇文章旨在深入闡述Python中隊列的定義及其應用,包括隊列的定義、隊列的類型、隊列的操作以及隊列的應用。同時,我們也會為您提供Python代碼示例。 一、隊列的定義 隊列是一種…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29

發表回復

登錄後才能評論