- 论坛徽章:
- 2
|
回复 #6 zx_wing 的帖子
char a[] = "hello";
char* p;
for ( p = a+sizeof(a)-2; p>=a; p-- )
printf("%c\n", *p );
与:
for ( p = a+sizeof(a)-2; p!=a; p-- )
printf("%c\n", *p );
效果是一样的: 如果真出现那帖里的情况, 不会越界,不会引发signal, 而是死循环。
上面2个版本与下面一个版本相比:
for ( p = a+sizeof(a)-1; p!=a /* or p>=a */; ) {
--p;
printf("%c\n", *p );
}
得到的好处就是 : 少写一行代码。 就为了这么点好处值得将代码变得不可移植么?
如果推荐下面一种写法, 什么烦恼都没有了, 比如不需要补充这么一句:
笔者无法100%保证,所以大家在实践中还是各自斟酌吧。
当然,会出现回绕的机器只是假象出来的, 也许下面一种写法的好处永远得不到。
我只是反感这么一种风气: 将自己的实践、 不经过严格的论证, 就上升到理论高度, 认为那是普遍真理。
我真的不是在说你, 你的文章里至少还有那么一句补充说明, 以说明这种经验的适用范围。
我其实说的是林锐…… 以及和林锐有相同倾向的一帮人……
算了, 别人写的代码是否可移植关我鸟事 …… 大家爱怎么写就怎么写好了……
[ 本帖最后由 OwnWaterloo 于 2009-12-21 18:20 编辑 ] |
|