在C中我们可以用两种方式发表评论:
1>
/* this is one way */
2 - ;
// this is 2nd way
两者有什么区别?
一个比另一个好吗?
或
两者在任何平台上的编译或处理都有相同的影响和差异吗?
编辑: 特别是为嵌入式
编写代码答案 0 :(得分:8)
从技术上讲,只有第一种方法可以保证适用于所有编译器,无论是现在还是过去。实际上,自20世纪80年代中期以来实施的所有C编译器都实现了两种方式,因此除非您要编写遗留编译器,否则您可以采用哪种方式最适合您或您的组织。
答案 1 :(得分:5)
只需使用更方便和自然的任何一种。简短的评论,少数几句话,在短线的末尾与//
很好地配合。对于传统的/* ... */
风格,更长的评论,分布在多行上可能更好。无论如何,这一切都归结为个人偏好和团队的编码标准。
对编译过程没有任何影响。
答案 2 :(得分:5)
使用//
评论的一个(可能是理论上的)理由是它们在C90中不受支持。确实,大多数(或许所有)现代C编译器都支持//
注释,即使它们不支持C99的其余部分,但不同的编译器支持不同的 C99子集。
如果您在符合C90的模式下调用它,任何支持C90的编译器都会拒绝(或至少警告)//
个注释。
如果你对可移植性狂热,并且你想确保你的代码将使用任何C编译器进行编译,那么你应该在符合C90的模式下编译它 - 这意味着//
注释将被拒绝。你可以启用扩展或部分(甚至完全)C99一致性,但是你也将启用其他C99功能 - 你的编译器不会警告你其他您可能意外使用的C99特定功能。
正如Andrew Grimm的评论指出的那样,有些项目的编码标准可能需要一种形式或另一种形式。
例如,gcc支持//
个评论和long long
(以及许多其他C99功能);在{gcc 中启用//
个评论,为long long
禁用诊断。
但是对于大多数目的而言,这可能不足以避免//
评论。如果您知道哪些功能是C99特定的,哪些编译器支持这些功能,以及您关心支持哪些编译器,则可以编写合理的可移植代码。
答案 3 :(得分:3)
如果您需要grep一些代码,即使您注释掉一个块(Eclipse中的STRG + Shift + 7),您也可以使用每行的单行注释。找到搜索词组的grepped代码显示为//。结果不会导致误解,因为没有显示多行评论。
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 if(MY_COUNTER == index)
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 if(MY_COUNTER == index)
7 tempVar = MY_COUNTER;
答案 4 :(得分:1)
使用//
注释的一个原因可能是,如果您想要注释掉内部有注释的更大代码块。您无法使用/* */
执行嵌套评论。
这不会编译:
/*
/*printf("foo");*/
printf("bar");
*/
但这没关系:
/*
//printf("foo");
printf("bar");
*/
答案 5 :(得分:0)
正如您所说:两者在任何平台上的编译或处理都有相同的影响和差异。
答案 6 :(得分:0)
哪一个更好是真正的个人偏好问题,对于跨越多行的评论,我会使用第一个,但这是我个人的偏好。
答案 7 :(得分:0)
/* this is one way */
主要用于块注释 和
//
表示单行。
如果哪个更好。
//
这个保证适用于任何编译器。