易码技术论坛

 找回密码
 加入易码
搜索
查看: 217765|回复: 7

CheLava函数实参求值顺序!

[复制链接]
发表于 2006-7-1 01:58:00 | 显示全部楼层
求值顺序在语言标准里是没有统一定义的。

求值顺序取决于编译器而不是语言。

滥写有副作用的语句会在某些编译器前吃苦头的。
[em01]
 楼主| 发表于 2006-7-1 11:27:00 | 显示全部楼层
我只是说c和Lava不同,请大家注意!

我用过的c的编译器全是从右到左
[em07]
发表于 2006-7-1 15:49:00 | 显示全部楼层
从来都是我让编译器吃苦头,LEE的LAVAX被我用的快崩溃了
发表于 2006-7-1 16:30:00 | 显示全部楼层
再崩溃也是你的机器吃苦头![em01]
发表于 2006-7-27 21:13:36 | 显示全部楼层
哈哈哈
发表于 2006-8-1 15:13:04 | 显示全部楼层
好象c编译器中也有按从左到右的..不一定..
 楼主| 发表于 2006-8-1 19:40:45 | 显示全部楼层
引用第6楼FrankHB2006-08-01 15:13发表的“”:
好象c编译器中也有按从左到右的..不一定..

大部分c编译器都是从右到左!
 楼主| 发表于 2006-7-1 00:41:08 | 显示全部楼层 |阅读模式
在c语言中,函数传递实参时要计算出表达式的值,然后传递数值。

在计算顺序上Lava、Lavo和C的不同,请注意!

这是C的代码

#include <stdio.h>


  void fcall(int i,int j,int k){
       printf("%d,%d,%d\n",i,j,k);
       printf("%d,%d,%d\n",++i,i++,i);
       getchar();
       }


  void main(){
       int i;
       i=0;
       fcall(++i,++i,++i);
       }


这是Lava和Lavo的

  void fcall(int i,int j,int k){
       SetScreen(0);
       printf("%d,%d,%d\n",i,j,k);
       printf("%d,%d,%d\n",++i,i++,i);
       getchar();
       }


  void main(){
       int i;
       i=0;
       fcall(++i,++i,++i);
       }


可是运行结果是c的

3,2,1

5,3,3

而Lava的是

1,2,3

2,2,3

可见,c是从右到左求值,Lava和Lavo是从左到右求值
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2024-5-8 11:09 , Processed in 0.016106 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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