注释
注释的作用是一套代码内文档。插入注释到程序中时,编译器直接忽略它们;它们只是有意地被人类用作读取源码的笔记。
语法
/* 注释 */
|
(1) | ||||||||
// 注释\n
|
(2) | (C99 起) | |||||||
1) 通称为“ C 风格”或“多行”注释。
2) 通称为“ C++ 风格”或“单行”注释。
在翻译阶段 3,通过把每段注释替换为单个空白字符,将所有注释从程序中移除。
C 风格
C 风格注释通常用于注释大块文本或小片代码;然而,能用它们注释单行。可以简单地以 /*
和 */
环绕文本,将文本作为 C 风格注释插入。 C 风格注释告诉编译器忽略 /*
和 */
间的所有内容。尽管不是 C 标准的一部分, /**
和 */
常用于指示文档块;这是合法的,因为星号被简单地当做注释的一部分。
除了在字符常量、字符串字面量或注释中,字符 /*
引入一段注释。检验这种注释的内容仅是为了鉴别多字节字符,以及寻找终止注释的 */
。 C 风格注释不能嵌套。
C++ 风格C++ 风格注释通常用于注释单行文本或代码;然而,能将它们放在一起组成多行注释。可以简单地前置 除了在字符常量、字符串字面量或注释中,字符 // y = f(x); // 调用算法 C 风格注释可出现在 C++ 风格注释内: // y = f(x); /* 调用算法 */ C++ 风格注释可出现在 C 风格注释内;这是排除一小块源代码的机制: /*
y = f(x); // 调用算法
z = g(x);
*/
|
(C99 起) |
注意
因为注释在预处理器阶段前被移除,宏不能用于组成注释,而不终止的 C 风格注释不会从被 #include 的文件中漏出。
/* 试图用宏组成注释。 */ /* 但空格替换字符 "//" 。 */ #ifndef DEBUG #define PRINTF // #else #define PRINTF printf #endif ... PRINTF("Error in file %s at line %i\n", __FILE__, __LINE__);
除了注释掉,用于排除源码的其他机制是:
#if 0 puts("this will not be compiled"); /* 与 C 风格注释不冲突 */ // 与 C++ 风格注释不冲突 #endif
和
if(0) { puts("this will be compiled but not be executed"); /* 与 C 风格注释不冲突 */ // 与 C++ 风格注释不冲突 }
C99 中引入 // 注释,在一些罕有场合是破坏性更改:
a = b //*除数:*/ c + d; /* C89 编译为 a = b / c + d; C99 编译为 a = b + d; */
示例
运行此代码
/* C 风格注释 能含有多行。 */ /* 或仅一行。 */ // C++ 风格注释能注释一行。 // 或者,能将 // 它们串在一起。 #include <stdio.h> int main(void) { // 将不运行下方代码 // puts("Hello"); // 将运行下方代码 puts("Hello"); return 0; }
引用
- C11 standard (ISO/IEC 9899:2011):
- 6.4.9 Comments (p: 75)
- C99 standard (ISO/IEC 9899:1999):
- 6.4.9 Comments (p: 66)
- C89/C90 standard (ISO/IEC 9899:1990):
- 3.1.9 Comments