DS計劃C深入項目學習總結——變數的範圍

來源:互聯網
上載者:User
1.1 變數範圍1.1.1 幾種常見類型變數的範圍

範圍(scope)或者可見度是指變數在程式內的可見和可引用的範圍。

比如:

1、 全域變數在所有的檔案都可見,那他的範圍就是所有檔案;

2、 static定義的全域變數,只在定義它的源檔案中可見,那他的範圍就是其所在的源檔案;

3、 函數內部的局部變數,只在其函數範圍內可見;

4、 有些變數,只在某一塊程式碼片段內可見(花括弧括起來的一段代碼);

void test_fun()

{

int test_i = 0;

test_i = 10;

if (test_i != 0)

{

int test_count = 15;

test_i = test_count;

}

test_i = test_count;//這裡會編譯出錯,因為test_count只在if條件的花括弧中有效。

}

1.1.2 變數使用的進階話題

下面大部分內容來自《代碼大全》。

1.1.2.1  使變數引用局部化

《代碼大全》這本書介紹了攻擊視窗的概念:介於同一個變數多個引用點之間的代碼可成為攻擊視窗,在這個視窗中新增代碼,可能會不當的修改此變數。

一般而言,把對一個變數的引用局部化,即把引用點儘可能集中在一起總是一種很好的做法。主要的好處是提高程式的可讀性和可維護性。如果變數的引用點都很集中,則閱讀代碼的時候,只要關注這一塊代碼就可以了,否則,閱讀者的目光需要在代碼中跳來跳去。

如何衡量變數引用的集中程度?《代碼大全》提到了變數跨度的概念:對變數所有引用間相隔的程式碼數。

void test_fun()

{

int test_i = 0;

int test_j = 0;

test_i = 10;//和第一次引用間隔1行代碼

if (test_i != 0)//和第二次引用間隔0行代碼

{

int test_count = 15;

test_i = test_count;//和第三次引用間隔1行代碼

}

}

test_i的跨度總共是2。test_i的平均跨度是2/3。

1.1.2.2  縮短變數的存活時間

變數的存活時間—— 一個變數存在期間所跨越的語句總數。也就是從第一次引用,到最後一次引用之間跨越代碼的行數。

跨度表明變數引用的集中程度,存活時間表明變數經曆的語句。

如所示,test_i存活時間是6條語句。

低存活時間的好處:

1、減小攻擊視窗,不易出錯。

2、使你對代碼有更準確的認識(提高可讀性)

3、減少初始化錯誤。

最後,一個明顯的好處是便於程式重構,如果一個程式拆分為多個小的程式,短的存活時間更有價值。

用跨度和存留時間來考察全域變數,會發現全域變數跨度和存留時間都很長——這是避免使用全域變數的好的理由之一。

1.1.2.3  減小範圍的一般原則

1、在迴圈開始之前再去初始化改迴圈裡使用的迴圈變數,而不是在該迴圈所屬的子程式的開始處初始化這些變數。

2、直到變數即將被使用時再為其賦值。把聲明和定義放在使用之前。

3、把相關語句放在一起。減少變數的跨度和存留時間。

4、把相關的語句組提取成功單獨的子程式。把一個長的子程式拆分為更小的、單獨的子程式可以縮小變數的範圍。

5、開始時使用最嚴格的可見度,然後根據需要擴充變數的範圍。當對變數範圍猶豫不決時,應該傾向於選擇該變數所能具有的最小的範圍:首先將變數限制於某個特定的迴圈,然後是局限於某個子程式,其次是類的private變數,protected變數,再其次對包()可見,最後不得已的情況下再把它作為全域變數。

關於對變數範圍的態度,取決於程式員如何看待“方便性”和“智力上的可管理性”。範圍越大,在寫代碼時越方便。但是寫出的程式更難於理解、閱讀、調試和維護。

1.1.3  結論

1、 全域變數在所有的檔案都可見,那他的範圍就是所有檔案。

2、 static定義的全域變數,只在定義它的源檔案中可見,那他的範圍就是其所在的源檔案。

3、 函數內部的局部變數,只在其函數範圍內可見。

4、 有些變數,只在某一塊程式碼片段內可見(花括弧括起來的一段代碼)。

5、 盡量使變數的引用局部化。

6、 盡量縮短變數的存活時間。

7、 盡量減少變數的範圍。

1.1.4 擴充閱讀

《代碼大全》第10章《使用變數的一般事項》會教你如何更好的使用變數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.