符号
注释
注释可能是大家认为比较熟悉的一个东西了,那么下面的注释哪个是对的呢?
来,慢慢看。
我们知道在预编译阶段,编译器会 将注释剔除用空格代替。 所以,A是对的。
int i;
而B的双引号中,即便是//
那也是字符串的一部分,所以B也是对的。
char *s = "abcdefgh //hijklmn";
C也是对的,\ 接续符
将上下两行链接起来。
//Is it a valid comment
好了,知道了一些基本的知识。那么以下代码又是啥呢?
y = x/*p;
编译器会报错!
因为它把/*
认为是注释了,而且没找到其匹配的*/
!
正确写法加个空格就好。
y = x / *p;
接续符和转义符
\
接续符表示断行,编译器会将其剔除,在反斜杠后面的字符自动接续到前一行。
注意:接续符后面不能有空格,下一行前面也不能有空格!
#def\ ine MAC\ RO 1
//这就是一条合法的宏定义,相当于
#define MACRO 1
而且\
除了可以被用作接续符,还是转义字符的开始标志。
左移和右移
左移和右移运算符是双目运算符。
左移的作用是把左边的运算数的各运算位全部左移若干位。
0x01 << 2+3
就是把0x01
左移五位,结果是32。
右移运算符往右移就是了。
但是有一点要注意:
对于有符号数,在右移时,符号位也将移动。当为正数时,最高位补0,当为负数时,最高位补1。
C剖析系列就到目前为止了,因为后面的我觉得比较简单,也就懒得写了。
后会有期!
参考文献
[1] 陈正冲 石 虎.C语言深度剖析.未出版,2020.7.