代码改变世界

C Traps & Pitfalls

2012-12-08 20:40  robturtle  阅读(238)  评论(0编辑  收藏  举报

2012/12/08 优先级错误

尼玛,才刚看完这本书没两个月,就犯了里面说的错误了!而且还是和里面的例子非常相似的错误!

在写一个系统编程的例子里有一个表达式:

(ret = read(src, ptr, len)) != 0

然后,非常可惜地,写成了:

(ret = read(src, ptr, len) != 0

于是这个ret就只能取0或1了!!!实在是被恶心到了……

几个月前 sizeof语义/数组与指针的区别

这个是之前写一个shell程序时调了半天才发现的。

int main(int argc, char **argv);
int main(int argc, char *argv[]);

上面两个main函数的声明是完全等价的,因为数组作为参数传递时传递的是指针。而 sizeof(argv[0]) 返回的是 4 而不是它指向字符串的字节长度!

形影不离的问题 关于内存泄露

虽然高手都建议你使用逻辑debug而不是debug应用程序,但如果你扫了好几遍你的C代码还是没有发现是哪里泄露了,就在vim下敲入"/++"吧!