C程式設計風格

2022-04-07 00:09:50 字數 1636 閱讀 5264

:如何在原始檔中合理分配函式?

答:通常,相關的函式放在同乙個檔案中。有時候(例如開發庫的時候),乙個原始檔(自然也

就是乙個目標檔案)放乙個函式比較合適。有時候,尤其是對某些程式設計師,太多的原始檔可能 會很麻煩,將多數以至所有的程式都放入少數幾個大的原始檔中也很誘人,甚至也是合適的。 希望用

static

關鍵字限制某些函式或全域性變數的作用域時,原始檔的分配就有更多限制了:靜 態函式和變數以及共享它們的函式都必須在同乙個原始檔中。 問:

用if(!strcmp(s1, s2))

比較兩個字串是否相等是個好風格嗎?

答:這並不是個很好的風格,儘管這是個流行的習慣用法。如果兩個字串相等,這個測試返回

真,但!

(「非」)的使用容易引起誤會,以為測試

不相等情況。 另乙個選擇是定義乙個巨集:

#define streq(s1, s2) (strcmp((s1), (s2)) == 0)

然後這樣使用:

if(streq(s1, s2))

另一種選擇(可以防止巨集的濫用,參見問題

10.2

)是定義

#define strrel(s1, op, s2) (strcmp(s1, s2) op 0)

然後你可以這樣使用:

if(strrel(s1, ==, s2)) ...

if(strrel(s1, !=, s2)) ...

if(strrel(s1, >=, s2)) ...

:為什麼有的人用

if(0 == x)

而不是if(x == 0)? 答

:這是用來防止乙個常見錯誤的小技巧:

if(x = 0)

如果你養成了把常量放在

==前面的習慣,那麼當你意外地把**寫成了:

if(0 = x)

編譯器就會報錯。顯然,一些人會覺得記住倒轉測試比記住輸入兩個

=號容易。(的確,就 算是經驗老道的程式設計師有時也會錯把

==寫成

=。)當然這個技巧只對和常量比較的情況有用。

另一方面,有的人又覺得這樣倒轉的測試既難看又影響注意力,因而提出應該讓編譯器 對

if(x = 0)

報警。(實際上,很多編譯器的確對條件式中的賦值報警,當然如果你真的需 要,你總是可以寫

if((x = expression))

或if((x = expression)!= 0)。 問

:為什麼有些**在每次呼叫

printf

前增加了型別轉換

(void)? 答

:printf

確實有返回值(輸出的字元個數或錯誤碼),但幾乎沒有誰會去檢驗每次呼叫的返

回值。由於有些編譯器和

lint

對於被丟棄的返回值會報警告,顯式地用

(void)

作型別轉換相當 於說:「我決定忽略這次呼叫的返回值,請繼續對於其他(也許不慎)忽略返回值的情況提出 警告」。通常,

(void)

型別轉換也用於

strcpy

和strcat

的呼叫,它們的返回值從沒有什麼驚 人之處。 

C 程式設計風格約定

我一直自認為,自己在程式設計功力還算說的過去,昨天乙個老師看了我以前寫的 說功力還需加強 當時我很鬱悶,其實我知道的可能還比他多 很多時候我們 都太注重高水平 尖端的技術,其實很多公司叫你寫一段簡單的程式,可能就會決定要不要你。他們是從 中看出了你的閱歷,你的水平。這些水平不是體現你的 尖端技術 況...

C 程式設計風格約定

參考 net設計規範 krzysztof cwalina,brad abrams著 1 必須是實際開發人員使用的約定。為了實現這個目標,我們審查了由.net框架的開發人員編寫的 有些約定並未在框架中普遍應用,對此我們不予採納。2 約定應該盡可能的合理 簡潔。我們認為只要不犧牲 的可讀性,在更少的行數...

C 程式設計風格約定

我一直自認為,自己在程式設計功力還算說的過去,昨天乙個老師看了我以前寫的 說功力還需加強 當時我很鬱悶,其實我知道的可能還比他多 很多時候我們 都太注重高水平 尖端的技術,其實很多公司叫你寫一段簡單的程式,可能就會決定要不要你。他們是從 中看出了你的閱歷,你的水平。這些水平不是體現你的 尖端技術 況...