y = x/*p ,这是表示x 除以p 指向的内存里的值,把结果赋值为y ?我们可以在编译器
上测试一下,编译器提示出错。
实际上,编译器把/* 当作是一段注释的开始,把/*后面的内容都当作注释内容,直到出
现*/为止。这个表达式其实只是表示把x 的值赋给y ,/*后面的内容都当作注释。但是,由
于没有找到*/,所以提示出错。
我们可以把上面的表达式修改一下:
y = x/ *p
或者
y = x/(*p)
这样的话,表达式的意思就是x 除以p 指向的内存里的值,把结果赋值为y 了。
也就是说只要斜杠(/ )和星号(*)之间没有空格,都会被当作注释的开始。这一点一
定要注意。
几个似非而是的注释问题
C 语言的注释可以出现在C 语言代码的任何地方。这句话对不对?这是我当学生时我
老师问的一个问题。我当时回答是不对。好,那我们就看看下面的例子:
A ),int/*...*/i;
B ),char* s="abcdefgh //hijklmn";
C), //Is it a \
valid comment?
D), in/*…*/t i;
我们知道C 语言里可以有两种注释方式:/* */ 和// 。那上面3 条注释对不对呢?建议你
亲自在编译器中测试一下。上述前3条注释都是正确的,最后一条不正确。
A),有人认为编译器剔除掉注释后代码会被解析成inti,所以不正确。编译器的确会将注
释剔除,但不是简单的剔除,而是用空格代替原来的注释。再看一个例子:
/*这是*/#/*一条*/define/*合法的*/ID/*预处理*/replacement/*指*/list/*令*/
你可以用编译器试试。
B),我们知道双引号引起来的都是字符串常量,那双斜杠也不例外。
C),这是一条合法的注释,因为\是一个接续符。关于接续符,下面还有更多讨论。
D), 前面说过注释会被空格替换,那这条注释不正确就很好理解了。