C語言之static辨析

2021-03-31 08:56:58 字數 1161 閱讀 7418

1、概述

static 宣告的變數在c語言中有兩方面的特徵:

1)、變數會被放在程式的全域性儲存區中,這樣可以在下一次呼叫的時候還可以保持原來的賦值。這一點是它與堆疊變數和堆變數的區別。

< td>

2)、變數用static告知編譯器,自己僅僅在變數的作用範圍內可見。這一點是它與全域性變數的區別。

2、問題:static的理解

關於static變數,請選擇下面所有說法正確的內容:

a、若全域性變數僅在單個c檔案中訪問,則可以將這個變數修改為靜態全域性變數,以降低模組間的耦合度;

b、若全域性變數僅由單個函式訪問,則可以將這個變數改為該函式的靜態區域性變數,以降低模組間的耦合度;

c、設計和使用訪問動態全域性變數、靜態全域性變數、靜態區域性變數的函式時,需要考慮重入問題;

d、靜態全域性變數過大,可那會導致堆疊溢位。

答案與分析:

對於a,b:根據本篇概述部分的說明b),我們知道,a,b都是正確的。

對於c:根據本篇概述部分的說明a),我們知道,c是正確的(所謂的函式重入問題,下面會詳細闡述)。

對於d:靜態變數放在程式的全域性資料區,而不是在堆疊中分配,所以不可能導致堆疊溢位,d是錯誤的。

因此,答案是a、b、c。

3、問題:不可重入函式

unsigned int sum_int( unsigned int base )

return sum;

}答案與分析:

所謂的函式是可重入的(也可以說是可**的),即:只要輸入資料相同就應產生相同的輸出。

這個函式之所以是不可**的,就是因為函式中使用了static變數,因為static變數的特徵,這樣的函式被稱為:帶「內部儲存器」功能的的函式。因此如果我們需要乙個可重入的函式,那麼,我們一定要避免函式中使用static變數,這種函式中的static變數,使用原則是,能不用盡量不用。

將上面的函式修改為可重入的函式很簡單,只要將宣告sum變數中的static關鍵字去掉,變數sum即變為乙個auto 型別的變數,函式即變為乙個可重入的函式。

當然,有些時候,在函式中是必須要使用static變數的,比如當某函式的返回值為指標型別時,則必須是static的區域性變數的位址作為返回值,若為auto型別,則返回為錯指標。

作者blog:http://blog.csdn.***/canvashat/

水滴石穿C語言之static辨析

1 概述 static 宣告的變數在c語言中有兩方面的特徵 1 變數會被放在程式的全域性儲存區中,這樣可以在下一次呼叫的時候還可以保持原來的賦值。這一點是它與堆疊變數和堆變數的區別。2 變數用static告知編譯器,自己僅僅在變數的作用範圍內可見。這一點是它與全域性變數的區別。2 問題 static...

水滴石穿C語言之static辨析

1 概述static 宣告的變數在 c語言中有兩方面的特徵 1 變數會被放在程式的全域性儲存區中,這樣可以在下一次呼叫的時候還可以保持原來的賦值。這一點是它與堆疊變數和堆變數的區別。2 變數用 static 告知編譯器,自己僅僅在變數的作用範圍內可見。這一點是它與全域性變數的區別。2 問題 stat...

C語言之static作用

在c語言中,static的字面意思很容易把我們匯入歧途,其實作用有三條 1 第一條也是最重要的一條 隱藏 當我們同事編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性,舉例來說 同時編譯2個原始檔 a.c和main.c 下面是a.c的內容 chara a global va...