正文

[069] 函数实参表列的求值顺序2006-11-19 16:21:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wentao/20483.html

分享到:

《C程序设计第二版》(谭浩强)



如果实参表列包括多个实参,对实参求值的顺序并不是确定的,有的系统按自左至右顺序求实参的值,有的系统则按自右至左顺序。许多C版本(例如Turbo C和MS C)是按自右而左的顺序求值。例:

int f(int a, int b);
void main()
{
    int i = 2;
    int p;
    p = f(i, ++i)
}

如果按自左至右顺序求实参的值,则函数调用相当于f(2, 3)。若按自右至左顺序求实参值,则它相当于f(3, 3)。可以在不同的环境中试一试, 就可知所用系统的处理方法。由于存在上述情况,使程序通用性受到影响。因此应避免这种容易引起不同理解的情况。

如果本意是按自右而左顺序求实参的值,可以改写为

j = i;
k = ++i;
p = f(j, k);

如果本意是按自左而右顺序求实参的值,可以改写为

j = ++i;
p = f(j, j);

这种情况在printf函数中也同样存在,如

printf("%d, %d", i, i++);

也发生上述同样的问题,使用时应注意,避免使用这种容易混淆的用法。


阅读(4294) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册