变参函数至少提供一个显示参数么

boomni 2012-05-14 11:25:35
int Fun(...)写成这样不行吗
...全文
77 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
boomni 2012-05-14
  • 打赏
  • 举报
回复
有错误吗
boomni 2012-05-14
  • 打赏
  • 举报
回复
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
这是那个宏
#define va_pre_start(ap,v) ( ap = (va_list)&v )
改成这样就可以了吧
boomni 2012-05-14
  • 打赏
  • 举报
回复
其实我是想做到这样
write(para1,para2,...)
如果用了va_start就直接从第二个para2开始了,
我想把para1也带进来,就是要弄个va_start执行完成后,让列表指针再自己减一次,不知可行否
沭水河畔 2012-05-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
int Fun(...)写成这样不行吗
[/Quote]
不行,因为必须知道第一个参数的摆放地址。
具体请读《变参函数的实现原理》
W170532934 2012-05-14
  • 打赏
  • 举报
回复
不行,可以先看下变参函数怎么定义的。你直接在括号里写几个点是没有用的,还要报错。
paschen 2012-05-14
  • 打赏
  • 举报
回复
可以这样写,我在VS2010上调试通过了
可这样写没意思,你办法获得变参的位置。

还有就是能用函数重载、数组等方式代替的,最好不要用变参
因为用变参极易出错,编译器对变量类型没有检查,还可能出现越界访问。
一根烂笔头 2012-05-14
  • 打赏
  • 举报
回复
不行,要给个起跑线”
qq120848369 2012-05-14
  • 打赏
  • 举报
回复
没有第一个变量,就不知道参数栈地址从何开始.
Saleayas 2012-05-14
  • 打赏
  • 举报
回复
可以的,但是,你实现这个函数的时候,不能直接使用 va_start 宏。
因为这个宏需要一个明确的参数地址。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧