[注释]是以被编译器视为单独的空格字符并且忽略其他的正斜线/星号组合(/*)开始的字符串序列。注释能够包括任何来自于可呈现字符集的字符组合,包括换行符,但是排除[注释结束]分界符(*/)。注释可以占据多行但是不能被嵌套。
注释可以出现在允许空格字符的任何地方。因为编译器会把注释视为单独的空白字符,你不能在符号中包括注释。编译器会忽略注释中的文字。
使用注释来编写代码文档。这个范例是一个被编译器接受的注释:
/* 包含关键字(比如 for 和 while)的注释不会产生错误。 */
注释可以出现在与代码声明相同的行:
printf( "Hello\n" ); /* 可以在这里注释 */
你可以选择在功能或者程序模块之前加上描述注释块:
/* MATHERR.C 说明了为数学功能而编写的
* 一个错误程序。
*/
因为注释不能包括被嵌套的注释,这个范例会导致一个错误:
/* 这个程序之外的注释测试
/* 打开文件 */
fh = _open( "myfile.c", _O_RDONLY );
.
.
.
*/
错误产生的原因是编译器只认可第一个 /*,在[打开文件]之后,作为注释的结尾。它尝试处理余下的文字并且当它发现 /* 出现在注释之外的时候就会导致一个错误。
虽然你可以使用注释来为测试目标而呈现特定的非活动代码行,预处理器指令 #if 和 #endif 以及条件编译是这个任务的有用选择。关于更多信息,请参考[预处理器参考]中的[预处理器指令]。
Microsoft 特定
Microsoft 编译器同样支持以两个正斜线(//)作为开始的单行注释。如果你使用编译选项 /Za(ANSI 标准),这些注释会产生错误。这些注释不可以扩展到第二行。
// 这是一行有效的注释
以两个正斜线(//)开始的注释终止于下一个没有冠以转码字符的换行符。在下一个范例中,换行符被冠以一个反斜线(\),创建了一个转码序列。这个转码序列导致编译器把下一行视为上一行的一部分。(关于更多信息,参考[转码序列]。)
// 我的注释 \
i++;
因此,i++; 声明就超出了注释。
Microsoft C 默认时启用了 Microsoft 扩展。使用 /Za 来禁用这些扩展。
结束 Microsoft 特定