2014-10-02 132 views
2

我正在維護項目,我發現在C源文件此數組的聲明:二維陣列在一個維度[1]

strcpy(vectorFields [0], field); // where char field[128] 
strcpy(vectorValues [0], vals); // where char vals[128] 

char vectorFields [1][FIELD_SIZE]; 
char vectorValues [1][VALUE_SIZE]; 

與初始化這個具有[1]大小的二維聲明是否合理(優化,可讀性,...)還是隻是一個遺留代碼,我可以安全地更新到monodimensional數組並調整初始化代碼?

回答

2

我能想到幾個可能的原因,如何這是約:

  1. 行維度原本一些值> 1,後來被改爲1。這是比較容易離開的聲明像這樣,而不是切換到一個更簡單的聲明,然後更改代碼中引用這些變量的每個點。

  2. 在某個地方有一個API(可能是外部的和/或有問題的改變),它接受主維度是動態的2D數組,例如,

    void foo(char bar[][FIELD_SIZE], int num_bars);

但是如果你有機會到這些變量引用,並沒有明顯的制約因素,如(2)上方,然後我看不出有任何理由不理順這所有的地方用法。

+0

保羅你是對的:在另一個應用了複製和粘貼編碼方法的地方(可惜我這個不好的做法在這個項目中使用了很多)我發現可能是複製的來源,其行的確是> 1. – Zac 2014-10-02 14:39:53

+1

@Zac:可悲的是,對於任何有歷史淵源的代碼庫來說,這是非常常見的 - 即使大多數從事代碼工作的人都能勝任,那麼他在公司任職期間總是會「污染」代碼的「那個人」被晉升爲管理職位;-))。 – 2014-10-02 14:46:35