易码技术论坛

 找回密码
 加入易码
搜索
查看: 315465|回复: 8

LAVA中多个增量(减量)运算的顺序??

[复制链接]
发表于 2006-7-7 18:03:00 | 显示全部楼层
为什么喜欢对这种无聊的问题争论不休?

好的程序代码是让人能够轻松看出来的,写出这些代码的人,完全是为了卖弄。

而且这个又是没有硬性规定的,各种编译器有自己的编译方式。Lava和C有差别是很正常的。
 楼主| 发表于 2006-7-7 18:36:00 | 显示全部楼层
以下是引用yzk0370在2006-7-7 18:03:00的发言:[BR]为什么喜欢对这种无聊的问题争论不休?

好的程序代码是让人能够轻松看出来的,写出这些代码的人,完全是为了卖弄。

而且这个又是没有硬性规定的,各种编译器有自己的编译方式。Lava和C有差别是很正常的。


抱歉……偶看书上写了,所以有LAVA编译了下~~运行结果不同……所以想问问……

引用书上的一句话:“使用++和--能给编程带来方便,使程序更加简洁……”

偶也是觉得很难懂……感谢Jay的解答!
发表于 2006-7-7 19:11:00 | 显示全部楼层
ansi c对同一语句中对同一变量进行两次以上的赋值的后果没有定义,任何一种编译器的实现方式都是合理的。
发表于 2006-7-7 23:06:00 | 显示全部楼层
尽量保持一致不是更省事,更具有可移植性!

所谓的跨平台不仅仅是做几个虚拟机那么简单!

c语言的可移植性很强的原因是代码的可移植性!而不是编译或伪编译后的可移植性!

当然,我们改变不了LavaX,所以在这里说明LavaX和c的区别,这样更好的为了LavaX的发展,也避免更多的人走弯路!
发表于 2006-7-8 08:16:00 | 显示全部楼层
可移植与跨平台还相去甚远。

你应该加强跨平台概念的理解!

跨平台的理念是无须移植,而不是为了在别的平台运行而疲于奔命的次次移植!
发表于 2006-7-8 12:22:00 | 显示全部楼层
ps:说一件和主题无关的事:

   貌似LAVAX里面的逻辑运算不支持“短路”

   比如  char buf[16];

         int index;

         ...

         if(index>=0&&buf[index]!=aChar) do something;

        ...

这种语句在C里面是可以的,但在LAVAX里面可能会造成数组访问越界。

因为C里面当index>=0判断失败就不会执行判断语句buf[index]!=aChar

而LAVAX是直接将两个结果&后再判断,这样虽然也无伤大雅,但写代码时不太方便。
发表于 2006-7-8 14:07:00 | 显示全部楼层
是有这种问题,所以通常在Lava里面要拆成两行
if(index>=0)
{
    if(buf[index]!=aChar)
    {
        ......
发表于 2006-7-9 15:47:00 | 显示全部楼层
C中 可以说i值是一个整体    是i值就是i值 只有唯一一个值

   

LAVA 中的i值就同时会有三个值了

二楼的就说的不对了
这种小事如果我们多研究的话   更有益于我们理解  C与LAVA的

 楼主| 发表于 2006-7-7 17:07:49 | 显示全部楼层 |阅读模式
看下面一段代码



  1. int i=3,k;
  2. void main()
  3. {

  4. k=(i++)+(i++)+(i++);
  5. printf("i=%d,k=%d",i,k);
  6. i=3;
  7. k=(++i)+(++i)+(++i);
  8. printf("i=%d,k=%d",i,k);
  9. i=3;
  10. k=(++i)+(i++)+(++i);
  11. printf("i=%d,k=%d",i,k);
  12. }

复制代码


LAVA虚拟机的运行结果是:

i=6,k=12,i=6,k=15,i=6,k=14



可C的运行结果貌似是:

i=6,k=9,i=6,k=18,i=6,k=15

LEE能解释下么……
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-5-7 21:25 , Processed in 0.010039 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表