在C,我們可以通過兩種方式提出意見:哪種方法可以在C中編寫註釋?
1>
/* this is one way */
2>
// this is 2nd way
兩者有什麼區別?
一個比另一個更好嗎?
或
做到既具有同樣的影響,並在任何平臺上編譯或處理沒有區別?
編輯: 特別編寫代碼爲嵌入式
在C,我們可以通過兩種方式提出意見:哪種方法可以在C中編寫註釋?
1>
/* this is one way */
2>
// this is 2nd way
兩者有什麼區別?
一個比另一個更好嗎?
或
做到既具有同樣的影響,並在任何平臺上編譯或處理沒有區別?
編輯: 特別編寫代碼爲嵌入式
一個(也許是理論上的)原因不使用//
的意見是,他們不是在C90支持。的確,大多數,也許是所有現代的C編譯器不支持//
的意見,即使他們不支持C99的休息,但不同的編譯器支持C99的不同子集。
支持C90將拒絕(或至少警告)//
評論,如果你在C90符合要求的方式調用它的任何編譯器。
如果您對可移植性很狂熱,並且您希望確保您的代碼可以用任何C編譯器進行編譯,那麼您應該按照符合C90的模式進行編譯 - 這意味着//
評論將被拒絕。您可以使擴展或部分(甚至全部)C99的一致性,但隨後你會允許其他C99的功能,以及 - 和你的編譯器不會警告你另一種則可能使用C99特定功能偶然。
而且安德魯格林的評論指出,一些項目可能已經編寫需要一個形式或其他標準。例如,gcc同時支持//
評論和long long
(以及許多其他C99功能);啓用//
在gcc中的註釋禁用診斷long long
。
但在大多數情況下,這可能不是一個好足夠的理由來避免//
意見。如果您知道哪些功能特定於C99,哪些編譯器支持這些功能,以及您關心哪些編譯器支持,則可以編寫合理的便攜代碼。
這是我想要知道的。懷疑/ /不支持舊版本的c ..thanks –
只需使用取其更方便,自然。簡短的評論,少數幾句話,在一個簡短的行結束與//
很好地工作。更長的評論,分佈在多條線上,或許與傳統的/* ... */
風格更好。無論如何,這一切都歸結爲個人偏好和團隊的編碼標準。
這對編譯過程沒有任何影響。
從技術上講,只有第一種方法可以保證適用於所有編譯器,現在和過去。實際上,自從20世紀80年代中期以來,所有C編譯器都實現了這兩種方式,所以除非您將爲舊編譯器編寫代碼,否則您可以採取哪種方式最適合您或您的組織。
儘管許多編譯器已經允許它們更長時間,但C++標準中添加了C++樣式註釋(//)。 –
'//'註釋是MSVC在C模式下編譯時支持的少數幾種C99語言(非庫)功能之一。其實,我想知道它是否是唯一的? –
正如您所說:兩者在任何平臺上的編譯或處理方面都具有相同的影響和差異。
哪一個更好是個人喜好的問題,對於跨越多行的評論,我會使用第一個,但這是我個人的偏好。
/* this is one way */
大多用這個塊註釋 和
//
單行。
如在哪一個更好。
//
這個保證可以在任何編譯器上工作。
不,第二個例子(雙斜槓)將不會在任何編譯器上工作,因爲它最初不受支持(正如Wallyk在其他答案中所述) – fluffyben
thanx正在修正 –
使用//
註釋的一個原因可能是如果你想註釋掉一大塊有註釋的代碼。你不能用/* */
做嵌套評論。
這不會編譯:
/*
/*printf("foo");*/
printf("bar");
*/
但是,這是確定的:
/*
//printf("foo");
printf("bar");
*/
如果您有需要到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;
我不用C編程,但我認爲一些開源項目(比如Ruby解釋器的MRI版本)只允許第一種方式。如果你打算爲他們做出貢獻,你也可以養成適應他們喜好的習慣。 –