Ansi-C中的单行注释

35

我习惯于使用Java和Visual Studio中的//来标注单行注释,但很惊讶在 Ansi-C 中没有这个功能。使用/* my comment */相当麻烦。在使用 Ansi-C 时有没有其他标记单行注释的方法?


19
如果人们解释一下为什么要踩我就好了... - mort
2
下投票的原因可能是因为你正在问一个可以在谷歌上轻松解决的问题。表达不满某个特定的注释风格在 ANSI-C 中不存在是一回事,而表达不满则是另一回事。混合注释风格是一个坏习惯/仅此而已/。 - Ahmed Masud
6
没错,确实很容易发现 Ansi-C 没有用于单行注释的特殊语法,但我想问的是是否有其他替代方法。 - mort
3
您可以切换到支持该功能的C99标准,烦恼就会消失。 - Ahmed Masud
4个回答

33

ANSI-C不支持变长参数,但当前标准修订版允许其存在,并且自C99标准版本开始就一直如此。


2
最近遇到了一些问题,我想我应该补充一下 - 我不喜欢在C99、C11等中使用C++的//注释。我立刻明白了我正在处理什么:“这是一个C文件”。这从未给我带来过任何问题。但这只是我的个人偏好。此外,在宏中无法使用//注释 - 我并不想在宏与内联之间进行争论。 - Brett Hale

10

你也可以编写一个宏:

#define COMMENT(x)

int main() {
   COMMENT(Hi there)
   return 0;
}

除此之外,ANSI C 中没有明显的错误 - 你是正确的,注意到 /* */ 风格在 ANSI C 89 中是无效的。


3
该宏的缺点是,除非你将其用括号包裹起来(例如 COMMENT((Hi, there))),否则你的注释中不能包含逗号。 - caf
2
@caf - 同意 - 我认为它实际上并没有比直接输入 /* */ 更有优势。 - Flexo
2
@awoodland:我更喜欢使用//语法来注释代码,因为你只需要在行首打字。写上COMMENT(和一个结束括号并不能改善这一点。 - mort
1
这种注释相比传统注释有什么优势? - olegst

7

好的...

ANSI C是C99;并且允许以//开头,一直延伸到该行结尾的注释。
在先前发布的标准(C89/C90)中没有描述//注释(但许多编译器仍然接受它们作为额外注释)。

您还有另一种选项可以进行注释:使用#if 0/#endif结构(通常用于注释“非活动”代码)

/* ... */
#if 0
这是注释
#endif
/* ... */

1
现在有点清楚了。我正在使用-pedantic选项,它强制执行严格的ISO C标准,而不仅仅是ANSI-C。可以说在ANSI-C(C99)中允许使用 //,但在严格的ISO C中不允许吗? - mort
4
使用gcc编译器,使用gcc -ansi -pedantic ...gcc -std=c89 -pedantic ...(目前)是相同的。要在符合C99标准的模式下使用gcc(尽可能),请尝试gcc -std=c99 -pedantic ... - pmg
谢谢澄清!因此,C有不同的版本-C89、C99和C11。至少前两个版本也被标准化为ANSI-C和ISO-C,这并不相同,对吗? - mort
3
ANSI-C或ISO-C是同一件事情(其中一个由美国国家标准协会ANSI发布,另一个由国际标准化组织ISO发布)。在1989年,ANSI发布了一项C语言标准(ISO在1990年也发布了该标准),该标准于1999年被新版标准所替代,而这个新版标准将被下一个标准所取代。目前标准的草案可以免费在http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf上获取,即将发布标准的草案可以在http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1548.pdf上获取。 - pmg
由于gcc尚未完全符合C99标准:请参见http://gcc.gnu.org/c99status.html - pmg
显示剩余4条评论

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接