C語言程式設計規範之我見 變數初始化

2021-07-28 12:31:49 字數 1213 閱讀 7200

c語言程式設計規範中,乙個爭論已久的問題,就是變數是否該在定義時進行初始化。

針對這個問題,談談我的個人想法。

首先,相比於變數定義時初始化,本人更傾向於變數按需初始化,具體如下:

a、 變數按需初始化,即變數定義時不初始化,而在變數使用前再進行賦值,此時可明確的知道該變數需要乙個什麼樣的值

b、 而變數定時義初始化,可能給變數賦了乙個不恰當的值,因為此時為變數初始化的任何值,等到該變數被使用時,都可能是乙個意料之外的值。例如,int i = 0; 變數 i 定義時被初始化成0了。程式在某個時刻用到該變數func(i),且在該函式呼叫之前,沒有其他地方對 i 賦值。而func函式內部,認為入參0是個有效的值,然後進行一些處理。而這有可能是我們不希望看到的,因為這是乙個誤操作(在使用 i 之前沒給它賦乙個有效的值)。此時最好的結果是:func認為0是無效的引數,不做處理直接返回即可,即不把影響擴大化。

c、 現在編譯器一般是可以檢查出這樣錯誤:變數在沒初始化的情況下就被使用了。如果你採用了b的初始化方式,編譯器就不會報錯了,那麼b中的意外就會發生

在變數定義時進行初始化,我們一般是期望給變數賦乙個無效的值,保證在以後使用該變數時可通過合法性校驗,避免因為使用了未初始化的變數(變數的值不確定)而產生意料之外的情況。

但在大型專案開發中,往往需要多人合作開發,每個人對於無效值的定義並不一定是一致的。例如程式設計師張三認為0為無效值,而程式設計師李四認為0是有意義的,0xffff才是無效的。那麼上文提及的情況b就會發生。當然在開發時,張三和李四提前約定好對無效值的定義,保證他們對無效值的認識是一致的,那也可以避免情況b的發生。但要明白,在大型產品迭代開發中,某個模組的**並非一直是張三維護、開發,如果來了新員工王五,他是否也會與張

三、李四一樣認為0是無效的呢?

c語言是面向過程的程式語言,作為c語言程式設計從業者,要時刻對於自己的變數心中有數。而在變數使用前進行賦值,會促使程式設計師思考此時該給變數賦乙個什麼樣的值才符合自己的期望,從而選擇乙個合適的值,避免了意料之外的情況發生。

當然,變數按需初始化並不是不要在定義時初始化,而是要靈活應用。比如,字串變數,在使用前一般要memset為0,如果將初始化的動作放在變數定義時,是可以有效的提高整個程式的執行效率的。而有些變數用於快取內部呼叫的返回值,而且只有在內部呼叫完成之後才會使用該變數,那就沒必要在該變數定義時進行初始化了。也就是說,變數在被使用前,一定要保證已被正確賦值了。

乙個好的程式設計規範,在大型產品合作開發中尤為重要,不但有助於提高**的可讀性、可維護性,而且對產品質量也起到正向的作用。

Uber Go 語言程式設計規範 初始化 Maps

對於空的 maps,請使用make 初始化,並且以程式設計的方式填充的。這使得map的初始化在表現上不同於宣告,並且可以方便地在以後新增容量大小提示 如果有的話 badvar m1 可以安全的讀寫 m2 在寫時會panic m1 map t1 t2 m2 map t1 t2 宣告和初始化看起來非常相...

c語言變數賦值,初始化

陣列變數為全域性變數,或被部分初始化,均會出現這種情況。c語言中,變數在沒有顯式初始化時,區分變數型別,有如下幾種情況 1 全域性變數,和靜態區域性變數,未初始化時值預設為0.無論是陣列還是變數,都是如此。2 區域性變數,初始值為隨機值。3 陣列類區域性變數,當被部分初始化時,未被初始化部分,值預設...

c語言static變數初始化

程式設計師面試筆試寶典 第123頁,舉了個例子 include void fun int i intmain 書中寫道 程式輸出結果為 0 00作者原意是想表明static int value i 是變數value由於static的修飾,只會定義一次value變數,並且沒有其他對value變數賦值的...