读书人

c形参计算顺序,大家哪位高手看到标准了

发布时间: 2012-03-27 13:44:24 作者: rapoo

c形参计算顺序,大家谁看到标准了,我找一个一下竟然没有找到啊
前几天和同学遇到一个小问题,今天整理一下和大家讨论一下,好共同学习。

实际上问题本身很简单,一个很简单的c语言调用

int main()
{
int i=0;
printf("%d,%d",i,i++);

return 0;
}
就是有这么一个函数,然后貌似有某个公司问输出是什么?

好吧如果你很疑惑你可以上VC或者GCC或者G++或者什么上试一下,很抱歉,你的输出可能是1,0.

这个可能就让很多人产生了误解,对了,首先我们要确定一下,在C语言里面这个printf是一个函数

,当然之所以它可以实现有N多个形参,当然是利用相应的技术,这个就不多说了,主要是printf是个

函数,所以,对于"%d,%d",i,i++,这三个数,将分别作为字符串,int类型,和int类型进行传递,
好吧,现在就是,这个为什么会输出的是1,0 ,而不是0,0.

对于函数的形参求值顺序,这个ANSI C他没有规定,而是依赖于编译器的,所以你是先i,在i++还是

,相反,或者你两个一起搞,都可以的。
说到求值顺序就不得不说,在ANSI C中,仅仅规定了,&&和||和?:和“,”的求值顺序,其他的,

你再怎么的都可以,
所以假设有表达式
int j=fun(i,j)+fun1(x,y);
那么函数fun(i,j),fun1(x,y)谁先执行,好吧,只有天知道!所以。这个要是真是某公司的面试题,那么你最好别去了!

大家可以看一本书《C缺陷与陷阱》里面的第三章专门介绍个这个问题。







大家谁看到ANSI C标准中关于这个的说法了,拿出来,看看

[解决办法]
10 The order of evaluation of the function designator, the actual arguments, and
subexpressions within the actual arguments is unspecified, but there is a sequence point
before the actual call.

c99 72页

读书人网 >C语言

热点推荐