2012-03-11 28 views
6

到目前爲止,我知道兩種風格:。C中有多少種風格的書寫功能?

/* 1st style */ 
int foo(int a) { 
return a; 
} 

/* 2nd style */ 
int foo(a) 
int a; 
{ 
return a; 
} 

(我看到有人在第二風格寫的代碼我很驚訝在第一,但第二個樣式的工作(下gcc作爲我測試)這讓我很好奇我想問這個問題。)

回答

0

第二個是K & RC風格的語法,但它現在已經過時了。 Checkout @Basile Starynkevitch的回答。

+0

而IIRC這是已經過時從1990年開始,我的版本爲「The C Programming Language,Second Edition,ANSI C」。 – 2012-03-11 12:52:06

+0

已過時,添加它。 – phoxis 2012-03-11 12:55:43

0

第二種樣式是舊樣式,並且支持向後兼容性。我不知道任何其他風格的頭頂,但你應該使用第一(新)的風格。當我開始使用C(1994)時,第二種(舊)風格已經被棄用了。

12

我不會將這些樣式稱爲語言變體(或方言)。

編碼風格是一組可選的約定,可能不會遵循。例如,某些編碼風格要求宏名稱都是大寫字母(但如果不遵循該規則,則會編譯代碼)。

你的 「2 第二風格」 被稱爲Kernighan的&裏奇Ç。它是在20世紀70年代後期定義的舊C(在由Kernighan和Ritchie編着的C的第一版中;後續版本已符合後來的C標準)。這是一種過時的語言。

當前的編譯器通常遵循C99 ISO標準(1999年出版),該標準已被新的C11標準(2011年出版)所取代。

GCC編譯器正在接受帶有-std=c99程序參數的C99標準。我強烈建議編譯gcc -Wall -std=c99;最近的GCC編譯器(即4.6和4.7)正在接受-std=c11 IIRC用於較新的標準C11

今天沒有編碼在舊的Kernighan和Ritchie C方言中:它已經過時,並且越來越少受編譯器的支持。恕我直言C99是一個很好的標準,如果你謹慎遵循。並且利用它的一些功能(特別是能夠在一個塊內混合聲明和語句;更老的C方言需要將所有聲明放在塊的開頭)。

該標準已取得進展,特別是因爲它增加了功能並且更精確w.r.t.目前的制度和做法(例如多核處理器)

+2

你會通過調用一種語言而不是使用K&R C來混淆人們,當你評論的時候是基於這一行代碼。 – Rob 2012-03-11 12:59:19

+0

+1,但是:舊風格是從70年代開始的,新風格是1989年定義的; MSVC編譯器仍然不遵循C99。 – 2012-03-11 12:59:57

2

有(至少)兩個缺點使用第二樣式時:

  1. 如果函數原型也不翼而飛,編譯器將不檢查適當的參數類型。而且,如果我沒記錯的話,參數數量也不會被檢查。C標準將(可能)不允許這種風格,並且你的程序將停止。這個(K & R,第一版)風格僅適用於向後兼容...有一天,C標準將(可能)

此外,爲了更好的可讀性,你可以把函數的返回類型在其自己的行(尤其是有用與長篇大論的收益類型,如unsigned long int和頭):

int 
foo(int a) 
{ 
    return a; 
} 
+0

您也可以這樣做,以便通過perl和awk腳本更輕鬆地自動提取文檔。 – 2014-06-29 23:05:03