关于C的基本语法的一个问题!
在C里,应该尽量用复合表达式,比如:a=a+m;------>a+=m;
a=a%n;------>a%=n;
这样做的原因是:
1、代码相对短小简练;
2、符合“逆波兰”的格式,编译生成目标代码质量更高;
以上二者都是C相对于其他语言的优势,所以能用复合表达式就尽量用复合表达式!
----------------解决方案--------------------------------------------------------
什么是“逆波兰”的格式
能不能解释一下
----------------解决方案--------------------------------------------------------
以下是引用独孤裘在2005-4-30 12:25:39的发言:
什么是“逆波兰”的格式
能不能解释一下
不是我不说,而是三言两语太难说清。要是你感兴趣的话,看看《编译原理》就明白了! ----------------解决方案--------------------------------------------------------
不是那么绝对吧,任何事物都有两面性。当然这样能提高程序得易读性,但是在较大的程度中很易出错。
----------------解决方案--------------------------------------------------------
为什么这么说?
----------------解决方案--------------------------------------------------------
以下是引用weizheng在2005-5-2 22:48:42的发言:
不是那么绝对吧,任何事物都有两面性。当然这样能提高程序得易读性,但是在较大的程度中很易出错。
其实,我个人认为程序的易读性是指,程序的结构的清晰度.而a=a+m;------>a+=m;的改变不是清晰度的问题,而是习不习惯的问题.大家可能觉得a+=m这种形式很别扭,不像a=a+m那么一看就明白,不过,大家也可以回忆一下,当我们初学C时,是否也觉if(a==3)很别扭!
----------------解决方案--------------------------------------------------------
a+=m和a=a+m最终生成的代码是不同的
a+=m的效率要比a=a+m高那么一点点点点点点(按照现在的计算机速度来说的确是这样的)
现在计算机的速度正在转变一些我们曾经认为是真理的观点。当我们曾经所努力捍卫的内存现在升级到了512M,这个时候选择是用long还是int已经没有多大意义了。(当然,这是在32位C/C++编译环境下)
----------------解决方案--------------------------------------------------------
逆波兰式和栈的关系的确很有意思,比如用这个做24点大概挺好的
----------------解决方案--------------------------------------------------------
以下是引用神vLinux飘飘在2005-5-3 9:11:41的发言:
a+=m和a=a+m最终生成的代码是不同的
a+=m的效率要比a=a+m高那么一点点点点点点(按照现在的计算机速度来说的确是这样的)
现在计算机的速度正在转变一些我们曾经认为是真理的观点。当我们曾经所努力捍卫的内存现在升级到了512M,这个时候选择是用long还是int已经没有多大意义了。(当然,这是在32位C/C++编译环境下)
C之所以这么火就是靠他的灵活性,以及代码的高效率,C有两大用途:写操作系统和芯片编程!写应用程序的,现在一般不用C,而选C++\Java\Delphi什么的.
在PC上写操作系统,当然没问题,但在实际中C更多的是代替汇编进行芯片编程,在单片机\DSP\CGI脚本的C编程或者是FPGA的外围芯片编程,那么哪怕只提高那么一点点点点点点效率也会极大的降低成本!
而且现在在实际生产中,操作系统不在只运行在传统的计算机上,在一些普通设备电路上同样也运行一些操作系统.比如,现在有些大型路由器,自身就有一个操作系统,不过比DOS还简单,在里面只要有万把个复合运算符,那节约的系统开销也是相当可观的了!
C的生命里在于它的运行效率是除机器语言和汇编以外最高的,而在接近硬件的层次开发中,它的通用范围最广,开发效率最高! ----------------解决方案--------------------------------------------------------