红色:正确的句法, 蓝色:产生警告,歧义的句法
1. 空语句警告,(如果要用空语句最好用NULL使其明显可见)
while(size -> 0)
NULL;
2.在&& , || , if, for, wiile 中使用== 和= 要小心,
while( *pchTo++ = *pchFrom )
NULL;
为了防止这样的警告,必须拿别的值,如零或空字符与赋值结果做显式的比较。
可写成: while((*pchTo++ = *pchFrom++) != '\0')
NULL;
这里还有一个减少这个警告的方法,将常量放在左边
if( '\t' == ch )
.........
这样不允许对常量进行赋值。
3. 必须对原型进行维护,必须自己建立原型。(防止参数传递的不符合性。)
4.增强原型的能力
如果 void *memchr(const void *pv, int ch, int size)
在调用该函数时,互换了ch与size参数,也不会警告,因此应使用更加精确的类型,增强原型提供的错误检查能力。
void *memchr(const void *pv, unsigned char ch, size_t size);
但是这样的缺陷是:常常必须进行参数的显示类型转化,以消除类型不匹配的错误
5.如果有单元测试, 就进行单元测试。
6. 运算时注意优先级错误
如word = bHigh << 8 + bLow 这个被解释成了: word = bHigh << (8 + bLow)