C/C++函数参数为何是从右到左?
来源:互联网 发布:金蝶erp软件介绍 编辑:程序博客网 时间:2024/05/17 21:56
C/C++函数参数为何是从右到左?
那是因为不定长参数函数的存在。。。。
我们先看看printf
函数
_Check_return_opt_ _CRTIMP int __cdecl _vfprintf_l(_Inout_ FILE * _File, _In_z_ const char * _Format, _In_opt_ _locale_t _Locale, va_list _ArgList);
没错,它是一个不定参函数,那么我们在实际使用中是怎么样知道它的参数个数呢?这就要靠format了,编译器通过format中的%占位符的个数来确定参数的个数。
现在我们假设参数的压栈顺序是从左到右的,这时,函数调用的时候,format最先进栈,之后是各个参数进栈,最后pc进栈,此时,由于format先进栈了,上面压着未知个数的参数,想要知道参数的个数,必须找到format,而要找到format,必须要知道参数的个数,这样就陷入了一个无法求解的死循环了!!
而如果把参数从右到左压栈,情况又是怎么样的?函数调用时,先把若干个参数都压入栈中,再压format,最后压pc,这样一来,栈顶指针加2便找到了format,通过format中的%占位符,取得后面参数的个数,从而正确取得所有参数。
如此,世界就正常了。
注意:
函数参数的压栈顺序跟函数参数计算顺序不是一回事,函数参数计算顺序跟具体的编译器实现有关。
1 0
- C/C++函数参数为何是从右到左?
- C语言函数参数压栈顺序为何是从右到左?
- C语言函数参数压栈顺序为何是从右到左?
- 为何是Objective-C?
- C语言中函数参数压栈方式为什么是从右到左的?
- C printf函数对参数的计算顺序,是从右往左的
- C或C++为什么被设计成是从右向左处理函数参数?
- C中printf计算参数是从右到左压栈的
- c 中printf计算参数时是从右到左压入栈的
- C中printf计算参数时是从右到左压栈的
- C中printf计算参数时是从右到左压栈的
- C语言中的可变参数-printf的实现原理 在C/C++中,对函数参数的扫描是从后向前的。C/C++的函数参数是通过压入堆栈的方式来给函数传参数的(堆栈是一种先进后出的数据结构),最先压入的参数最后出
- C语言中函数参数为什么是由右往左入栈的?
- C语言中的可变参数函数是如何实现的?
- c语言函数参数处理顺序-从右向左
- [c/c++]函数参数缺省值
- [c/c++]函数参数缺省值
- c可变函数参数
- 【模板】【数论】扩展欧几里得算法
- mysql之表复制
- iOS获取网络状态
- 蚂蚁分类信息系统 5.8 网上下载的免费版MYMPS蚂蚁分类信息系统 v5.8 GBK 插件安装后无法正常使用
- XML解析方式小谈
- C/C++函数参数为何是从右到左?
- Spring Bean的作用域测试
- spring:ClassPathResource读取applicationContext.xml,如果加属性编辑器失败
- 大数据分析的技术栈(五)-Impala
- desc 获取数据表结构
- 使用Android4.4新增新媒体功能中的音量增强器LoudnessEnhancer实现仿酷狗音乐一键强音功能
- java集合——数组、List和ArrayList、LinkedList的区别
- java连接oracle数据库
- Android 自定义加载等待动画