本文目錄一覽:
c語言怎樣聲明和定義全局變數
定義在函數體外部的變數叫全局變數,
要定義全局變數你只要把變數定義在
所有函數外部即可。
要注意的是,全局變數只對它定義位
置以下的函數可見。
#includestdio.h
void f1();
void f2();
int y=100;
int main()
{
printf(“%d\n\n”,y);
//printf(“%d\n”,x);這不可以讀x,x對main()不可見
f1();
f2();
return 0;
}
int x;
void f1()
{
x=200;
}
void f2()
{
printf(“%d\n”,x);
printf(“%d\n”,y);
}
C語言中如何定義全局變數
眾所周知,全局變數在被定義後,系統會為全局變數分配內存並且它還可以被其他模塊通過C語言中extern關鍵字調用。這樣就必須在 xx.C 和xx.H 文件中定義。這種重複的定義很容易導致錯誤。 下面是只需用在頭文件中定義一次就可以在別的模塊使用的定義方法。
格式: 定義全局宏。
#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語言全局變數的定義是什麼?
在所有函數外部定義的變數稱為全局變數(Global Variable),它的作用域默認是整個程序,也就是所有的源文件,包括 .c 和 .h 文件。
例如:
int a, b; //全局變數
void func1( )
{
//TODO:
}
float x,y; //全局變數
int func2( )
{
//TODO:
}
int main( )
{
//TODO:
return 0;
}
a、b、x、y 都是在函數外部定義的全局變數。C語言代碼是從前往後依次執行的,由於 x、y 定義在函數 func1() 之後,所以在 func1() 內無效;而 a、b 定義在源程序的開頭,所以在 func1()、func2() 和 main() 內都有效。
如何在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語言中如何定義全局變數
1、記住一條就夠了:在函數之外定義的變數就是全局變數。用static修飾的變數可以是全局的,也可以是局部的,所以說「用static修飾的變數是全局變數」是錯誤的。用static修飾的變數的生命周期與全局變數一樣,但可見性仍分全局和局部。
2、全局變數在整個c文件中都能使用,而局部變數在其作用域內才能使用,舉個例子:
int f = 7;// 這個是全局變數
int myadd(int a, int b)
{
int c = a + b;// c是局部變數,只能在myadd中使用
return c;
}
int main(void)
{
printf(“%d\n”, c);// 因為c是myadd中定義的局部變數,這裡會報錯。
printf(“%d\n”, f);// f是全局變數,這句是正確的。
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/154466.html