2008-09-16 44 views
1

什麼優勢,如果有的話,通過格式化C代碼提供如下:這是什麼奇怪的C代碼格式?

while(lock_file(lockdir)==0) 
    { 
    count++; 
    if(count==20) 
     { 
     fprintf(stderr,"Can't lock dir %s\n",lockdir); 
     exit(1); 
     } 
    sleep(3); 
    } 
if(rmdir(serverdir)!=0) 
    { 
    switch(errno) 
     { 
     case EEXIST: 
      fprintf(stderr,"Server dir %s not empty\n",serverdir); 
      break; 
     default: 
      fprintf(stderr,"Can't delete dir %s\n",serverdir); 
     } 
    exit(1); 
    } 
unlock_file(lockdir); 

對一些比較典型的如

while(lock_file(lockdir)==0) { 
    count++; 
    if(count==20) { 
     fprintf(stderr,"Can't lock dir %s\n",lockdir); 
     exit(1); 
    } 
    sleep(3); 
} 
if(rmdir(serverdir)!=0) { 
    switch(errno) { 
     case EEXIST: 
      fprintf(stderr,"Server dir %s not empty\n",serverdir); 
      break; 
     default: 
      fprintf(stderr,"Can't delete dir %s\n",serverdir); 
    } 
    exit(1); 
} 
unlock_file(lockdir); 

我只是覺得頂配版本難以閱讀和獲取縮進級別適用於長塊以外的語句,特別是對於包含多個嵌套塊的長塊。

我能看到的唯一優點就是不同,並在您編寫的代碼上留下指紋。

我注意到vim格式化將不得不手動處理頂部的情況。

回答

2

通過遵循一些格式化和評論標準,首先向其他人展示您的尊重,這些人將閱讀並編輯您編寫的代碼。如果您不接受規則並編寫某種深奧的代碼,最可能的結果就是您無法有效地與其他人(程序員)溝通。代碼格式是個人選擇,如果軟件僅由您和您編寫,並且沒有人需要閱讀它,但有多少個現代軟件僅由一個人編寫?

+1

我希望那樣簡單。問題在於競爭標準。有些但並非全部更喜歡前者(或者說,Ben對前者的描述)。其他人更喜歡後者。雙方都對此有宗教信仰。 – Randolpho 2009-02-19 23:32:53

9

沒有。縮進和其他編碼標準是一個偏好問題。

4

個人喜好我會想到嗎?我想它有一個垂直線的代碼塊,因此可能更容易一目瞭然地工作?就我個人而言,我更喜歡直接從前一行開始的括號

1

它只是另一種風格 - 人們編碼他們喜歡如何編碼,這是一種可接受的風格(儘管不是我的首選)。我認爲它比沒有縮進括號但是其中的代碼更常見的樣式有很多缺點或優點。也許可以通過說明它更清楚地劃分代碼塊來證明它的合理性。

3

代碼格式是個人的品味。只要它很容易閱讀,它將支付維護費用!

1

爲了使這種格式具有「優勢」,我們確實需要一些等效的C代碼以另一種格式進行比較!

在我工作的地方,使用這種縮進方案是爲了促進自制摺疊編輯機制。因此,我看不出這種格式有什麼根本性的錯誤 - 在某些合理的限制範圍內,格式化是個人喜好的問題。

5

它看起來很標準。我所做的唯一個人改變是將花括號與上一行的開頭對齊,而不是下一行的開頭,但這只是個人選擇。

無論如何,您在那裏查看的格式的樣式是C和C++的標準格式,因爲它使代碼更易於閱讀,特別是通過查看可以告訴的縮進級別你在哪裏嵌套循環,條件等,例如:

if (x == 0) 
{ 
    if (y == 2) 
    { 
    if (z == 3) 
    { 
     do_something (x); 
    } 
    } 
} 

確定在例如,它是很容易看到發生了什麼,但如果你把大量的代碼中的if語句,它有時是很難告訴你哪裏沒有一致的縮進。

在你的例子中,看看exit(1)語句的位置 - 如果它沒有像這樣縮進,很難說出它的位置。事實上,你可以告訴它在這個大的if語句結尾。

25

頂部的例子被稱爲「Whitesmiths風格」。 Wikipedia's entry on Indent Styles解釋了幾種風格及其優點和缺點。

+0

我更喜歡Allman或GNU自己,因爲我總是很難讀取其他類型的函數(){layout。 – 2008-11-18 01:53:27

8

您看到的縮進是Whitesmiths style。在第一版代碼完成中描述爲「開始 - 結束邊界」。這種風格的基本論點是,在像C(和Pascal)這樣的語言中,一個if管轄單個語句或塊。因此,整個塊,而不僅僅是它的內容應該顯示從屬於if -statement一致縮進。

XXXXXXXXXXXXXXX  if (test) 
    XXXXXXXXXXXX   one_thing(); 

XXXXXXXXXXXXXXX  if (test) 
    X      { 
    XXXXX     one_thing(); 
    XXXXX     another_thing(); 
    X      } 

回來時,我第一次讀到這本書(90年代),我找到了論據「開始 - 結束塊邊界」是有說服力的,雖然我不喜歡太多,當我把它付諸實踐(在帕斯卡爾)。我更喜歡C語言,並且覺得很難理解。我最終使用Steve McConnel所謂的「仿真純塊」(Sun's Java Style,這幾乎是K&R)。

XXXXXXXXXXXXXX X  if (test) { 
    XXXXXX    one_thing(); 
    XXXXXX    another_thing(); 
X      } 

這是用於在Java中編程的最常用的樣式(這是我整天所做的)。這也與我的previous language最相似,這是一種「純塊」語言,不需要「仿真」。沒有單個語句體,控制結構語法中固有的塊。

IF test THEN 
    oneThing; 
    anotherThing 
END