设为首页收藏本站

ISO/IEC C++ China Unofficial

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 415|回复: 4

关于参数传递个数问题

[复制链接]

1

主题

3

帖子

32

积分

新手上路

Rank: 1

威望
0
经验
29
贡献
0
发表于 2015-11-28 17:43:28 | 显示全部楼层 |阅读模式
C和C++中参数传递的个数限制,参数传多了会不会出现诡异的问题?比如,无效内存访问导致段错误等问题。
回复

使用道具 举报

3

主题

20

帖子

202

积分

超级版主

mikonmikonmi

Rank: 8Rank: 8

威望
4
经验
170
贡献
4
发表于 2015-11-28 17:53:29 | 显示全部楼层
这里和实现有关。
标准文档会约定实现至少应当提供的可用实参数目(例如C11 5.2.4.1 Translation Limits指出,一次函数调用中可传递的实参不应少于127个)。
但是同时考虑实现,比如一个前六个整数参数、前八个浮点参数都走寄存器,其余参数走栈帧,caller清理帧,caller和callee各自保护一部分寄存器的调用约定上,如果你真的爆掉了栈,那么或许爆炸的位置会在caller上——因为要由它来准备参数。
沿海征收头GAY骨
回复 支持 反对

使用道具 举报

1

主题

3

帖子

32

积分

新手上路

Rank: 1

威望
0
经验
29
贡献
0
 楼主| 发表于 2015-11-28 18:08:27 | 显示全部楼层
岩川黑鬼 发表于 2015-11-28 17:53
这里和实现有关。
标准文档会约定实现至少应当提供的可用实参数目(例如C11 5.2.4.1 Translation Limits指 ...

哇唔,吧主回复好快啊,感激ing ~ 估计真的和实现相关了~ 我还在找问题 ~ 在此先感谢吧主 。有后续问题,一定汇报吧主  喵~
回复 支持 反对

使用道具 举报

5

主题

33

帖子

88

积分

超级版主

Rank: 8Rank: 8

威望
0
经验
55
贡献
0
发表于 2015-11-28 19:04:34 | 显示全部楼层
C是用shall来约定的,实现违反了最小限制就是nonconforming implementation,用户依赖就是non-strict conforming program。
C++是informal的annex B比较函数只要求shall document(也就是implementation-defined)限制的情况(还不要求就是fixed value),下面具体限制值也只是建议,应该都是针对翻译的。有些违反这些限制的情况直接就是错的,比如new的[]里的值太大;有些违反改变翻译行为,如求值表达式个数太多导致expression不是core-constant-expression,再如嵌套模板实例化层数。
超过参数个数都没有明确要求具体行为,靠谱的实现一般就会文档写清楚具体值,超过了就编译错误了。

回复 支持 反对

使用道具 举报

1

主题

3

帖子

32

积分

新手上路

Rank: 1

威望
0
经验
29
贡献
0
 楼主| 发表于 2016-1-10 18:44:55 | 显示全部楼层
幻の上帝 发表于 2015-11-28 19:04
C是用shall来约定的,实现违反了最小限制就是nonconforming implementation,用户依赖就是non-strict confo ...

已经解决啦~自己memcpy把返回地址覆盖了。。。 导致程序跪的那个惨。~ 多谢二位相助~ 小弟感激之 !
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|ISO/IEC C++ China Unofficial    

GMT+8, 2017-6-27 01:10 , Processed in 0.091538 second(s), 28 queries , Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表