社区
C语言
帖子详情
c中参数入栈顺序
criticalsection
2012-10-26 02:09:51
C语言中 f(f1(), f2())
有什么方法保证函数f1先于函数f2被调用?
...全文
229
11
打赏
收藏
c中参数入栈顺序
C语言中 f(f1(), f2()) 有什么方法保证函数f1先于函数f2被调用?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
criticalsection
2012-11-16
打赏
举报
回复
原来如此: 入栈顺序 跟 求值顺序是2个概念 求值顺序依赖于编译器的实现
mymtom
2012-10-26
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
x = f1();
f(x,f2());
只能这样.
详情看顶置帖子
[/Quote]
++
问题是这样有意义吗,难道f1后执行,会导致结果不同?
如果是这样的话,要考虑重新设计, 而不是纠结在这种毫无意义的问题上。
lin5161678
2012-10-26
打赏
举报
回复
[Quote=引用 3 楼 的回复:]
这跟顺序点没啥关系吧?只是参数入栈顺序吧?
[/Quote]
是求值顺序不是入栈顺序 然后求值顺序在这里无法确定
想确定执行顺序应该只有#1楼的解决办法了
dpdp_2012
2012-10-26
打赏
举报
回复
据说可以用PASCAL
不知道为什么我用PASCAL 在vs2008和gcc下都编译通不过
一鸣惊人
2012-10-26
打赏
举报
回复
老谭的书经典吗
AnYidan
2012-10-26
打赏
举报
回复
[Quote=引用 9 楼 的回复:]
引用 1 楼 的回复:
x = f1();
f(x,f2());
只能这样.
详情看顶置帖子
++
问题是这样有意义吗,难道f1后执行,会导致结果不同?
如果是这样的话,要考虑重新设计, 而不是纠结在这种毫无意义的问题上。
[/Quote]
++
criticalsection
2012-10-26
打赏
举报
回复
我还是去找本老谭的c语言来看吧 多么经典啊 多么具有中国特色啊
iamnobody
2012-10-26
打赏
举报
回复
首先提到入栈顺序的C语言教材都可以当作垃圾.
其次,函数的调用是一个运算, 顺序点决定运算的顺序,当然也决定函数调用的顺序.
入栈顺序跟计算顺序没有任何关系.
自己认真理解顶置帖子吧.
先找本 C primer 来看吧.
criticalsection
2012-10-26
打赏
举报
回复
这跟顺序点没啥关系吧?只是参数入栈顺序吧?
criticalsection
2012-10-26
打赏
举报
回复
置顶帖子?给个链接撒
iamnobody
2012-10-26
打赏
举报
回复
x = f1();
f(x,f2());
只能这样.
详情看顶置帖子
C语言函数
参数
入栈
顺序
探讨及栈的增长方向
四种方法判断栈的生长方向 Determine the Direction of Stack Growth 由该文章知道计算机
中
栈的生长方向为由高到低,及栈底为高地址,栈顶为低地址,因此函数输入
参数
入栈
顺序
可以由栈地址大小判断,地址大的先
入栈
,地址小的后
入栈
#include void Var_Order(int x, int y, int z) { printf
c/c++函数
参数
的
入栈
顺序
和计算
顺序
先给出本文参考的链接: [C/C++函数
参数
读取
顺序
] [关于c语言和c++
中
的函数
参数
的执行
顺序
的问题],裘宗燕老师的讲解非常准确。尤其是对于表达式计算,表达式的副作用,都有启发性的讲解。 [C++函数
参数
的
入栈
顺序
]问题其实今天的学习始于这样一段代码的结果:#include
void foo( int x, int y, int z ){ printf( "%d
C语言
参数
的
入栈
的
顺序
对技术执着的人,比如说我,往往对一些问题,不仅想做到“知其然”,还想做到“知其所以然”。C语言可谓博大精深,即使我已经有多年的开发经验,可还是有许多问题不知其所以然。某天某地某人问我,C语言
中
函数
参数
的
入栈
顺序
如何?从右至左,我随口回答。为什么是从右至左呢?我终究没有给出合理的解释。于是,只好做了个作业,于是有了这篇小博文。 #include void foo(int x, int
c/c++
参数
入栈
顺序
和
参数
计算
顺序
如果大家细心的话应该知道c/c++语言函数
参数
入栈
顺序
为从右至左,那么为什么这样呢?来看看两个知识点:
参数
的计算
顺序
与压栈
顺序
。
参数
入栈
顺序
c/c++
中
规定了函数
参数
的压栈
顺序
是从右至左,函数调用协议会影响函数
参数
的
入栈
方式、栈内数据的清除方式、编译器函数名的修饰规则等。
参数
传递和命名约定 Visual C/C++ 编译器支持以下调用约定。 关键字 堆栈清理
参数
传递 __cdecl Caller 以相反的
顺序
(从右到左)将
参数
压入堆栈 __clrcall
C/C++函数
参数
的
入栈
顺序
,计算
顺序
和可变
参数
的实现
函数
参数
入栈
顺序
#include void foo(int x, int y, int z) { printf("x = %d at [%X]\n", x, &x); printf("y = %d at [%X]\n", y, &y); printf("z = %d at [%X]\n", z, &z); } int main(int a
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章