免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: zcm211

[函数] 一个函数能传多少个参数 [复制链接]

论坛徽章:
0
发表于 2007-09-26 08:50 |显示全部楼层
原帖由 gangjh 于 2007-9-26 07:55 发表
C89,C99標準比較

    放宽的转换限制
  限制                  C89标准       C99标准
数据块的嵌套层数        15            127
条件语句的嵌套层数       8              63
内部标识符中的有效字符 ...


赞!还真没注意过。。

论坛徽章:
0
发表于 2007-09-26 08:50 |显示全部楼层
原帖由 huayd 于 2007-9-25 16:24 发表
寄存器个数。
一般是最多6个
当然可以用其他方法传递更多的参数
比如结构体。。。


这种说法是不正确的。未必所有的体系结构都要将参数的地址或者值放在寄存器里.比如ARM,对参数的使用的积存器的个数有所限制,放不下的时候会把参数压入栈,使用参数的时候再出栈.

当然如果参数过多的话,结构体是个很好的选择.

论坛徽章:
0
发表于 2007-09-26 08:52 |显示全部楼层
原帖由 huayd 于 2007-9-25 16:24 发表
寄存器个数。
一般是最多6个
当然可以用其他方法传递更多的参数
比如结构体。。。



完全错误。你没有理解,函数是如何传递参数的。
GCC编译器,五个或更少的参数是使用寄存器,多了就不使用寄存器了。

论坛徽章:
0
发表于 2007-09-26 08:55 |显示全部楼层
原帖由 zcm211 于 2007-9-25 16:07 发表
我突然空虚,想知道一个函数最多能传几个参数进去,在C里



受堆栈的大小影响的,还有参数的长度,也就是所有的传入参数的总长度不能超过空闲堆栈的大小,否则就发生堆栈溢出

论坛徽章:
0
发表于 2007-09-26 09:13 |显示全部楼层
原帖由 naihe2010 于 2007-9-26 08:52 发表



完全错误。你没有理解,函数是如何传递参数的。
GCC编译器,五个或更少的参数是使用寄存器,多了就不使用寄存器了。


fun1是有5个参数的函数,fun2也是有5个参数的函数。如果在fun1里调用fun2,按你说fun1的五个参数使用了寄存器,那么fun2的5个参数放在哪儿?

论坛徽章:
0
发表于 2007-09-26 11:00 |显示全部楼层
如果放了一个大一点的结构体呢?寄存器肯定放不下。

论坛徽章:
0
发表于 2007-09-26 11:42 |显示全部楼层
原帖由 gangjh 于 2007-9-26 07:55 发表
C89,C99標準比較

    放宽的转换限制
  限制                  C89标准       C99标准
数据块的嵌套层数        15            127
条件语句的嵌套层数       8              63
内部标识符中的有效字符 ...

赞一个,学习了

论坛徽章:
0
发表于 2007-09-26 15:50 |显示全部楼层
原帖由 gangjh 于 2007-9-26 07:55 发表
C89,C99標準比較

    放宽的转换限制
  限制                  C89标准       C99标准
数据块的嵌套层数        15            127
条件语句的嵌套层数       8              63
内部标识符中的有效字符 ...





学习,学习

论坛徽章:
0
发表于 2007-09-26 15:59 |显示全部楼层
谁会传这么多参数
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP