2012年4月4日 星期三

[筆記] 變數宣告在什麼位置比較好?

 作者  ie945167 (龍蝦)                                      站內  Lobster
 標題  [筆記] 變數宣告在什麼位置比較好?
 時間  2012/04/04 Wed 17:38:43
───────────────────────────────────────

不負責任聲明:以下憑印象+google寫成,有錯誤很正常 0rz

              如果有人願意指出錯誤,我會很感謝您的 <(_ _)>

--------------------本文開始分隔線--------------------

以前的 C-style 寫法,希望變數都宣告在函式最一開始的地方

這樣的話,有宣告什麼變數都一目了然,非常的方便

如下所示

void main()
{
    int a, b, c

    a = xxx;

    b = xxx;

    c = xxx;
}

而且不論早宣告還是晚宣告,程式在 compile 的時候都一樣會將全部空間都撥出來給你

例如你整個程式宣告了三個 int 的變數

那麼不論這三個變數在最一開始就宣告了

或是在程式中段或尾段才宣告

compile 所撥出來的空間都是一樣的

那麼宣告在什麼時間點或位置有差別嗎?

經主管說明後,真的有差…

最好是在你要使用這個變數前再宣告,而且盡可能的給予初值

如下所示

void main()
{
    …
    …
    …

    int a = XXX;

    int b = XXX;

    int c = XXX;
}

不過我也不清楚給予初值最主要的目的是什麼,在網路上查了一下,
int x = 10;


int x;
x = 10;

效果是相同的
但後者彈性太大,而且在 code 海中,x=10 很容易被忽略掉。

另一個說法是:

最好在建構式中,給予所有變數初值,避免執行期間產生錯誤,

因為一般而言,C++在除錯版的時候,會自動給定變數初值(0, NULL),而Release版不會

變數值是看當時配置的記憶體資料內容而定

所以典型的程式描述是我Debug版跑起來都沒錯,但是Release版就是會當機...。

回到正題,這樣做有什麼好處呢?

1. 當你在維護程式時,你想要知道變數影響的地方,

    你只要從宣告的地方開始往下找就好,而不需要從函數最一開始的地方開始看。

2. 若宣告在函數開頭的地方,有時會無法給予初值,

    因為有些變數需要程式先執行某段 code 後才能給予初值。

3. 當程式中途有 return 結束的狀況時,如下所示

    void main()
    {
        int a, b, c

        a = xxx;

        return ???;

        b = xxx;

        c = xxx;
    }

    我印象中是說宣告變數時,背後都會去執行某一段 code

    因此如果一開始就把變數都宣告好,也執行了背後那段 code

    但是程式因為 return 結束或其他原因而沒有使用到這個變數

    那麼執行宣告 b, c 的 code 的時間就浪費掉了

    int 這種資料型態可能還好

    但如果是那種大物件的資料型態,花費的時間有時就會很可觀了

--

     接球會"噴"

我             舉球會"歪"              但是!   我算分超強 o(一︿一+)o

                         攻擊會"OUT"

--
▅◣ Origin:  謠 言 報  bbs.csie.fju.edu.tw
▋◤ Author: ie945167 從 219-85-0-189-adsl-nei3.dynamic.so-net.net.tw 發表

沒有留言:

張貼留言