关于cout和printf的压栈顺序问题
来源:互联网 发布:java md5加密 16 编辑:程序博客网 时间:2024/06/05 14:37
原文地址:http://blog.csdn.net/zhanghenglei/article/details/7320291
如果有这样一个函数:
int max(int a, int b);
我这样调用它:
int x = 10;
int y = 6;
int z = max(x, y);
生成代码时,必然是y先入栈,然后x入栈,再call max。这就是右序入栈,c/c++的默认方式。
但是,如果在调用时,以表达式做为参数,又会怎么样呢?看下面
int z = max(x - y, x + y);
要知道,在调用max的时候,不可能把x + y这样的整个表达式入栈,必须求出表达式的值,然后将表达式的值做为
函数调用的参数入栈。可是,这里有两个表达式:x-y 和 x+y,那么先应该求x-y的值,还是先求出x+y的值?
c/c++语言都没有规定这个顺序,编译器实现可以自己定义。也就是说,一个编译器,可以先求出x+y的值,再求x
-y的值,然后将x+y的值入栈,然后再将x-y的值入栈,调用max。也可以先求出x-y的值,再求x+y的值,然后将x+y
值入栈,然后再将x-y的值入栈,调用max。 参数求值顺序不定,但是参数入栈顺序确定。 0 0
- 关于cout和printf的压栈顺序问题
- 关于cout和printf的压栈顺序问题
- cout和printf的混用而产生的顺序问题
- 为什么 printf 和 cout 的输出顺序有问题呢??
- printf函数与cout参数压栈顺序问题
- printf和cout的运算顺序
- printf函数和cout参数压栈问题
- cout和printf的压栈与a++和++a
- 讨论printf和cout的参数调用顺序
- 关于cout执行顺序的问题
- cout和printf的混用
- printf和cout的区别
- printf()和cout的区别
- cout和printf的区别
- printf和cout的速度
- cout和printf的区别
- cout和printf的区别
- cout 和 printf 输出先后问题
- 1.1listView优化之convertView
- C++的运算符重载 http://blog.csdn.net/zgl_dm/article/details/1767201
- GeoHash算法详解
- 句子逆序
- 【SSH项目实战】国税协同平台-11.角色权限管理1
- 关于cout和printf的压栈顺序问题
- 【SSH项目实战】国税协同平台-12.角色权限管理2
- 人工智能:第一章 绪 论
- [LeetCode]017-Letter Combinations of a Phone Number
- homerHEVC代码阅读(14)——基础结构之ref_pic_set_t、rate_control_t、rate_distortion_t
- 在线学习网站之freecodecamp
- CSU - 1548 三分找最值
- 【SSH项目实战】国税协同平台-13.用户与角色关系
- 最短路+最小花费环-HDU-4370-0 or 1