2.1注释符号
1)编译器会将注释剔除,但不是简单的剔除,而是用空格代替原来的注释。
2)只要斜杠(/)和星号(*)之间没有空格,都会被当作注释的开始。
3)出色注释的基本要求
a)注释应当准确、易懂,防止二义性。
b)边写代码边注释,修改代码的同时修改相应的注释,以保证注释和代码的一致性。
c)注释是对代码的“提示”,而不是文档,应当简单明了。
d)一目了然的语句不加注释。
e)对于全局数据(全局变量、常量定义等)必须要加注释。
f)注释采用英文,尽量避免在注释中使用缩写,特别是不常用的缩写。
g)注释的位置应与被描述的代码相邻,可以与语句在同一行,可以在上行,但不可放在下方。同一结构中不同域的注释要对齐。
h)注释的缩进要与代码的缩进一致。
i)注释代码段时应注重“为何做(why)”,而不是“怎么做(how)”。
j)数值的单位一定要注释。
k)对变量的范围给出注释,尤其是参数。
l)对一系列的数字编号给出注释,尤其在编写底层驱动程序的时候(比如引脚编号)。
m)对于函数的入口/出口函数、条件语句、分支语句给出注释。
n)避免在一行代码或表达式的中间插入注释。
o)复杂的函数中,在分支语句、循环语句结束之后需要适当的注释,方便区分各分支或循环体。
p)对于不需要被编译的区域要使用条件编译来实现。
void example_code(void)
{
#if 0 //delete start by <author> for needless <date>
Needless treatment1; //section1 should be eliminated
Needless treatment2; //section2 should be eliminated
#endif //delete end by <author> for needless <date>
}
2.2接续符和转义符
C语言里以反斜杠(\)表示断行。编译器会将反斜杠后面的字符自动接续到前一行。但是注意:反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格。 反斜杠还可以被用作转义字符的开始标识。
2.4逻辑运算符
对于双目运算符,函数调用必须是是第一个操作数。
if (func() || (a == 3))
2.5位运算符
1)位操作需要用宏定义好后再使用。
2)如果位操作‘~’和‘<<’应用于基本类型无符号字符型或无符号短整型,结果会立即转换为操作数的基本类型。
3)位运算符不能用于基本类型是有符号的操作数上。
4)一元减运算符不能用在基本类型无符号的表达式上,除非在使用之前对两个操作数进行大小判断,且被减数必须大于减数。
2.7++、–操作符
C语言有这样一条规则:每一个符号应该包含尽可能多的字符。也就是说编译器将程序分解成符号的方法是,从左到右一个一个字符的读入,如果该字符可能组成一个符号,那么再读入下一个字符时,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成组成的字符串已不再可能组成一个有意义的符号。这个处理策略被称为“贪心法”。