拆分函數的時候,對於拆出來得到的新函數,
要看裏面的所有變量是什麼類型的變量,是否有定義。
按照變量所寫的位置,分爲幾種:
普通變量、數組下標變量、小數點或->後面的變量、宏裏面的變量,
當然,宏裏面的變量也分爲普通變量、數組下標變量、小數點或->後面的變量,
對於小數點或->後面的變量可以不用管,對於普通變量、數組下標變量,需要注意是否有定義。
如果是全局變量或宏定義的常量,那就是有定義,如果沒有定義,那就有2種處理方式:
要麼傳參,要麼直接在新函數中定義。
傳參是爲了傳值進來或者傳值出去,而有的臨時變量,既不會傳入,也不會傳出,就不用傳參。
臨時變量的生命週期拆分:
有的函數是這麼寫的:
int x;
x=fun1();
y=f(x);
x=fun2();
z=f(x);
如果要把這個代碼拆成2個函數,對於x這個變量,其實是可以拆開的,也就是說,上述代碼等價於
int x;
x=fun1();
y=f(x);
int xxx
xxx=fun2();
z=f(xxx);
這樣,拆開成2個函數之後,就不用把第一個函數計算出來的x的值傳到第二個函數。
總結:
(1)注意讀宏
(2)小數點或->後面的變量可以不用管,全局變量或者宏定義的常量也不用管,宏裏面的變量和其他變量要麼傳參,要麼直接在新函數中定義。
(3)傳參是爲了傳值進來或者傳值出去,而有的臨時變量,既不會傳入,也不會傳出,就不用傳參。
(4)形如上述的代碼中,臨時變量的生命週期可拆分,避免冗餘的參數傳遞。