读书人

为啥Kamp;R中非常喜欢在while的判断中赋值

发布时间: 2013-07-29 10:30:31 作者: rapoo

为什么K&R中非常喜欢在while的判断中赋值
为什么K&R中非常喜欢在while的判断中赋值
比如典型的strcat函数,将两个字符串连在一起:


[解决办法]
....
char temp;
do
{
tmp = s[i] =t[j];
++i;
++j;
}while(tmp);

区别不大。
[解决办法]
充分利用了语言特性:表达式的值。代码更"少"。
[解决办法]

while((s[i++] = t[j++]) != '\0')
;


这是传统的C风格,追求代码简练。

它相当于

s[i] = t[j];
while(s[i] != '\0')
{
i = i + 1;
j = j + 1;
s[i] = t[j];
}
//再加上下面两句才与原来的代码完全等价,不对于当前功能无用,可以省去
// i = i + 1
// j = j + 1


比while((s[i++] = t[j++]) != '\0');的写法嗦了很多。
不过,用分号作为“空语句”的方式不太好,应该:




while((s[i++] = t[j++]) != '\0')
{
}


下面的“空语句”也比较常用:


while((s[i++] = t[j++]) != '\0')
NULL;


读书人网 >C语言

热点推荐