一年前,我开始尝试使用C,我看到了解释stdio.h标头的注释//
。今天,决定阅读K& R C(这是根据stackoverflow帖子阅读的最推荐的书)我一直看到这个/* comment */
评论,从未看到//
评论。这两者有区别吗? (他们有不同的目的吗?)有关于此的编码风格吗?
答案 0 :(得分:3)
K& R C书(第二版)描述了ANSI C(也称为C89)。在此版本//
中 - C中不允许使用注释,但它们位于(ISO)C99中。它们是从C ++继承的。
两者之间的区别在于:
//
- 评论为行评论,意味着它们从//
开始到下一个新行延伸。 /* */
- 评论是阻止评论,意味着他们从/*
开始,到*/
结束。它们可以跨越多行,它们可以在相同的行中以其周围的代码开始和结束,例如:
printf("%s\n", /* I wonder if this could be done simpler */ "Hello world!");
在这种情况下,行注释会产生:
printf("%s\n", // I wonder if this could be done simpler "Hello world!");
这将是语法错误,除非在下一行继续printf
语句。
答案 1 :(得分:1)
略有不同。如果要用'//'对整个块(多行)代码进行注释,则必须在每行的开头添加一个'//'。此外,'//'会在该序列之后注释掉所有内容。
// This
// is
// a
// block
// comment
'/ * .. * /'版本有一个明确的开头和结尾,所以你可以使用一个序列来评论你想要的多少(或很少)。
虽然这并不总是最好的想法(尝试和阅读可能会让人感到困惑),但是可以只使用'/ * .. * /'版本注释掉一部分行。
for(i = 0; i < /* TEST_VAL */ NOT_TEST_VAL; ++i)
你不能用//
来做到这一点for(i = 0; i < // TEST_VAL NOT_TEST_VAL; ++i)
表情格式不正确?
此外,与其他人一样,您不能在任何C89限制代码中使用'//'表达式。
答案 2 :(得分:0)
原始C规范不包含//样式注释,这是AFAIK仅在C ++中正式引入。基本上所有当前的编译器都支持它,但也只支持C模式。对于简短的单行注释,因此它是优选的,因为它更容易键入。项目特定的编码指南通常会说明在哪里使用。
答案 3 :(得分:0)
我同时使用两者。在决定评论类型时要考虑的一件事:
如果您使用/* ... */
样式注释掉一小段文本,例如在一个函数中,然后想要注释掉整个函数,如果您不小心,则会遇到问题。例如:
/*
void my_function() {
...
some_line_of_code(); /* your old comment */
...
}
*/
编译器会将旧注释的结束*/
解释为注释块的结尾,这不是您想要的。如果您使用//
样式进行行注释,则这不是问题。
答案 4 :(得分:0)
虽然他们不被允许进入c89,但现在他们被允许了。两者之间的主要区别在于您的评论所需的行数。但一般来说:
int x = 0 // This comment can be used for quick descriptions.
/*
* This kind of comment should be used for multiple lines
* that take more than 3 lines.
*/
最后,这一切都取决于你喜欢什么,但这是我见过如何使用每条评论的一般约定。
答案 5 :(得分:0)
/**/
在撰写多行评论时可能会更好用,例如:
System.out.println("Hello, world!");
/* Basic hello world statement
yada yada yada
Goodbye */
“//”样式注释可能用于编写单行注释,如图所示:
// This instance declares a private variable