哪个是用C写评论的更好方法?

时间:2011-09-07 08:13:13

标签: c embedded comments

在C中我们可以用两种方式发表评论:

1>

/* this is one way */

2 - ;

// this is 2nd way

两者有什么区别?
一个比另一个好吗?

两者在任何平台上的编译或处理都有相同的影响和差异吗?

编辑:      特别是为嵌入式

编写代码

8 个答案:

答案 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)

  1. 这是一种轻松创建多行注释的方法
  2. 您只能使用这种评论方式对每行进行评论。
  3. 哪一个更好是真正的个人偏好问题,对于跨越多行的评论,我会使用第一个,但这是我个人的偏好。

答案 7 :(得分:0)

/* this is one way */

主要用于块注释 和

//

表示单行。

如果哪个更好。

//

这个保证适用于任何编译器。