2011-09-07 37 views
5

在C,我們可以通過兩種方式提出意見:哪種方法可以在C中編寫註釋?

1>

/* this is one way */ 

2>

// this is 2nd way 

兩者有什麼區別?
一個比另一個更好嗎?

做到既具有同樣的影響,並在任何平臺上編譯或處理沒有區別?

編輯: 特別編寫代碼爲嵌入式

+0

我不用C編程,但我認爲一些開源項目(比如Ruby解釋器的MRI版本)只允許第一種方式。如果你打算爲他們做出貢獻,你也可以養成適應他們喜好的習慣。 –

回答

4

一個(也許是理論上的)原因使用//的意見是,他們不是在C90支持。的確,大多數,也許是所有現代的C編譯器不支持//的意見,即使他們不支持C99的休息,但不同的編譯器支持C99的不同子集。

支持C90將拒絕(或至少警告)//評論,如果你在C90符合要求的方式調用它的任何編譯器。

如果您對可移植性很狂熱,並且您希望確保您的代碼可以用任何C編譯器進行編譯,那麼您應該按照符合C90的模式進行編譯 - 這意味着//評論將被拒絕。您可以使擴展或部分(甚至全部)C99的一致性,但隨後你會允許其他C99的功能,以及 - 和你的編譯器不會警告你另一種則可能使用C99特定功能偶然。

而且安德魯格林的評論指出,一些項目可能已經編寫需要一個形式或其他標準。例如,gcc同時支持//評論和long long(以及許多其他C99功能);啓用//在gcc中的註釋禁用診斷long long

但在大多數情況下,這可能不是一個好足夠的理由來避免//意見。如果您知道哪些功能特定於C99,哪些編譯器支持這些功能,以及您關心哪些編譯器支持,則可以編寫合理的便攜代碼。

+0

這是我想要知道的。懷疑/ /不支持舊版本的c ..thanks –

5

只需使用取其更方便,自然。簡短的評論,少數幾句話,在一個簡短的行結束與//很好地工作。更長的評論,分佈在多條線上,或許與傳統的/* ... */風格更好。無論如何,這一切都歸結爲個人偏好和團隊的編碼標準。

這對編譯過程沒有任何影響。

8

從技術上講,只有第一種方法可以保證適用於所有編譯器,現在和過去。實際上,自從20世紀80年代中期以來,所有C編譯器都實現了這兩種方式,所以除非您將爲舊編譯器編寫代碼,否則您可以採取哪種方式最適合您或您的組織。

+2

儘管許多編譯器已經允許它們更長時間,但C++標準中添加了C++樣式註釋(//)。 –

+1

'//'註釋是MSVC在C模式下編譯時支持的少數幾種C99語言(非庫)功能之一。其實,我想知道它是否是唯一的? –

0

正如您所說:兩者在任何平臺上的編譯或處理方面都具有相同的影響和差異。

0
  1. 這是一種能夠方便地創建多行註釋
  2. 每行可以使用這種註釋方式僅僅註釋。

哪一個更好是個人喜好的問題,對於跨越多行的評論,我會使用第一個,但這是我個人的偏好。

0
/* this is one way */ 

大多用這個塊註釋 和

// 

單行。

如在哪一個更好。

// 

這個保證可以在任何編譯器上工作。

+0

不,第二個例子(雙斜槓)將不會在任何編譯器上工作,因爲它最初不受支持(正如Wallyk在其他答案中所述) – fluffyben

+0

thanx正在修正 –

1

使用//註釋的一個原因可能是如果你想註釋掉一大塊有註釋的代碼。你不能用/* */做嵌套評論。

這不會編譯:

/* 

/*printf("foo");*/ 
printf("bar"); 

*/ 

但是,這是確定的:

/* 

//printf("foo"); 
printf("bar"); 

*/ 
3

如果您有需要到grep一些代碼,你將有優勢與用於每次單行註釋即使你註釋掉一個塊(在Eclipse中爲STRG + Shift + 7)。您找到搜索詞組的grepped代碼是顯示WITH //。由於沒有顯示多行註釋,結果不會導致誤解。

1 #define MY_COUNTER 42 
2 if(MY_COUNTER == index) 
3 { 
4  tempVar = calcSomething(); 
5  doThis(); 
6 // tempVar = MY_COUNTER; 
7  doThat(); 
8 } 

grep的結果:
1的#define MY_COUNTER 42
2如果(MY_COUNTER ==指數)
6 //的TempVar = MY_COUNTER;

在上面的代碼您在grep的結果(搜索MY_COUNTER)直接看到,管路8註釋。

1 #define MY_COUNTER 42 
2 if(MY_COUNTER == index) 
3 { 
4  tempVar = calcSomething(); 
5  doThis(); 
6 /*  
7  tempVar = MY_COUNTER; 
8 */ 
9  doThat(); 
8 } 

在這裏,你不能看到註釋行:
1的#define MY_COUNTER 42
2如果(MY_COUNTER ==指數)
7的TempVar = MY_COUNTER;

相關問題