双字符 /* 引入一条注释,除非它位于字符常量、字符串字面值或注释。一旦发现了这个标志着注释内容起始的符号后,后面的多字节字符将被逐个检查,直至找到标志注释内容结束的 */。
双字符 // 也会引入一条注释,除非它位于字符常量、字符串字面值或注释。一旦发现了这个标志着注释内容起始的符号后,后面的多字节字符将被逐个检查,直至换行符为止(注释内容不包含这个换行符)。
示例 1
/* 和 // 可以作为字符串字面值的一部分:
char *sl1 = "s/*l1";
char *sl2 = "s//l2";示例 2
像下面这样写会导致未定义的行为:
#include "//some.h"
编译器可能会报告以下错误,然后终止。
fatal error: //some.h: 没有那个文件或目录
compilation terminated.示例 3
下面一行是以 // 开始的一行注释,字符串 “*/” 是注释内容。
//*/示例 4
/* 和 */ 可以嵌入到行内,不会对它们以外的内容产生影响。
double radius = D/*diameter*//2;
相当于:
double radius = D /2;示例 5
如果由于相邻的反斜线(\)和回车符导致两行合并为一个逻辑行,并且反斜线前面是注释符号,那么这是一个两行的注释。例如:
//\
int i;
或者:
/\
/ int i;
相当于两行的:
//int i;示例 6
如果 // 位于 /* 和 */ 之间,它们将作为注释内容而被忽略。
/*//*/ int i;
相当于:
int i;示例 7
// 后面的 /* 和 */ 将作为注释内容而被忽略。
int m = n//**/o
+ p;
相当于:
int m = n
+ p;示例 8
下面的写法并不能构成注释,相反,这会导致语法错误。
#define glue(x,y) x##y
glue(/,/) int k;
编译器会报告错误:
error: pasting "/" and "/" does not give a valid preprocessing token
glue(/,/) int k;
^
note: in definition of macro ‘glue’
#define glue(x,y) x##y
^
领取专属 10元无门槛券
私享最新 技术干货