c语言语法糖公式,C语言一些语法糖

语法糖可以提供方便,让程序员少写几行代码,让代码看起来简洁。不过有时语法糖不如多个语句组合灵活。

for循环

维基百科“语法糖”收录了这条,简单的说下面两个语句意思完全一样

while(i

{

do();

++i;

}

for(;i

{

do();

}

这里for循环的优点是能防止自增语句忘了写,do长一点的话往往被忽略。不过有些情况for循环难以胜任,比如下面

while(iter!=list.end)

{

if(cond(iter))

iter=list.delete(iter);    //删除list中符合条件的元素

else

++iter;

}

C语言的for语句并没有多大优势(如果看C99之前的不能在循环里面定义循环变量,优势就更小了),甚至连for这个单词的意思都体现不出来。有的语言有foreach、for[1...n]之类的写法就强大多了。

后置++ --

我想把自增自减都算上,不过这玩意用的挺多的,汇编语言也有自增操作可以对应起来,姑且把前置自增留下把。自增运算如果不是一个单独的语句,理解的时候还是要在脑中把语句分成使用和自增两部分,不如写两个语句直观。后置自增都可以用前置自增代替,就是多写一行而已。

使用自增优点是大大减少代码量,当然缺点是大大降低代码可读性,以及增加一些未定义行为之类乱七八糟的概念折磨初学者和考生。我的意见是自增只用来单独的一句,不掺和其他代码。

//减少代码量的例子

while((*des++ = *src++) != 0);

//可以用下面的代替

while((*des = *src) != 0)

{

++des;

++src;

}

//这个代码就没办法缩成一行,把自增放到上面会有未定义行为

while(des[i] = src[i])

++i;

复合赋值运算符

诸如+= -= *= /= >>= <<= .......由于历史原因,这些玩意唯一的作用就是少写代码,缺点就是让人多背写运算符优先级(虽然优先级是一组的不过看着也乱)。这些都可以用两个运算符代替。简单的写法,比如遍历偶数写个i+=2还是可以的。复杂的话只用=号。

连等

a=b=c这样的写法(和a=c;b=c等价)。为了满足这种写法,C语言的赋值表达式可以返回右值。当然这一条带来的负面效应恐怕远远大于少写代码的好处,导致出现了if(NULL==p)这样的畸形写法。如果说赋值返回右值有情可原的话,C++中赋值返回左值就是笑话了:(a=b)=c这句话有什么意义?有什么实用价值?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值