官术网_书友最值得收藏!

建議10:盡量少使用全局變量

全局變量的作用前面已經介紹了許多,其主要作用就是增加函數間數據聯系的渠道。由于同一源文件或多個源文件中的所有函數都能夠引用全局變量的值,因此,如果在一個函數中改變全局變量的值,就會影響到其他的函數,相當于各個函數間有直接的傳遞通道。由于函數的調用只能帶回一個返回值,因此有時可以利用全局變量來增加函數聯系的渠道,從而使函數可以得到一個以上的返回值。

盡管如此,過多使用全局變量也會給我們帶來許多的麻煩,主要表現為:

□ 由于全局變量是靜態存儲方式,因此它在程序的全部執行過程中都會占用存儲單元,而不是僅在需要時才開辟存儲單元。

□ 它使函數的通用性降低,因為函數在執行時依賴其所在的外部變量。在程序設計時,我們要求模塊的功能單一,各模塊之間的相互影響盡量少,而用全局變量很顯然是不符合這個原則的。通常,我們都會要求把C程序中的函數做成一個封閉體,從而通過“實參-形參”的渠道來實現與外界的聯系,這樣的程序移植性好,可讀性強。

□ 使用的全局變量過多,會降低程序的清晰性,我們往往難以清楚地判斷出每個瞬時各個外部變量的值。由于在各個函數執行時都可能改變外部變量的值,這就很容易導致程序出錯。

□ 如果在同一個源文件中,外部變量與局部變量同名,則在局部變量的作用范圍內,外部變量會被“屏蔽”,即它將不起任何作用。

基于上面的原因,建議盡量減少全局變量的使用,同時建議你:

□ 如果全局變量僅需要在單個源文件中訪問,則可以將這個變量修改為靜態全局變量,以降低模塊間的耦合度。

□ 若全局變量僅由單個函數訪問,則可以將這個變量改為該函數的靜態局部變量,以降低模塊間的耦合度。

□ 使用全局變量、靜態全局變量與靜態局部變量的函數時,需要考慮重入問題。

主站蜘蛛池模板: 黄龙县| 琼中| 乌兰县| 绥芬河市| 昌图县| 鲁甸县| 文成县| 神农架林区| 通河县| 酒泉市| 松桃| 铜山县| 沁阳市| 武宣县| 同德县| 易门县| 隆昌县| 正安县| 南郑县| 乐至县| 平乡县| 都江堰市| 南开区| 长丰县| 旺苍县| 辽宁省| 称多县| 洪江市| 高青县| 富蕴县| 和平县| 澳门| 京山县| 松滋市| 景洪市| 遂川县| 托克逊县| 桦川县| 简阳市| 甘德县| 长子县|