社区
C语言
帖子详情
变参函数
nickgg
2006-07-25 03:37:59
原有一个函数 int GetInfo(int A,...);//这个函数有BUG!
现在要编一函数修正它
int GetInfoEx(int A,...)
{
if(A < 0) return -1;
else return GetInfo(A,...); /*这里怎么调用原函数???*/
}
...全文
287
17
打赏
收藏
变参函数
原有一个函数 int GetInfo(int A,...);//这个函数有BUG! 现在要编一函数修正它 int GetInfoEx(int A,...) { if(A < 0) return -1; else return GetInfo(A,...); /*这里怎么调用原函数???*/ }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dick_song
2006-07-26
打赏
举报
回复
同意在原函数上改,另写一个函数不是不行,用va_list就可以把参数正确的传入,但这样的风格不好。既然您是写中间层的,您怎样保证使用者会call GetInfoEx而不再call GetInfo呢?GetInfo里依旧是有bug啊!
至于在调用GetInfo时做判断的想法也是不好的风格,因为内部的问题就应该在内部解决,否则这样的代码会很难维护。
adintr
2006-07-26
打赏
举报
回复
先把 GetInfo 的参数是怎么确定的弄清楚,比如是用前面的 int 来表示参数个数,或是用什么结束标识来表示参数结束。中间可变参数的类型是怎么确定的,等等。
然后把传进来的参数分析出了,再传给原函数。
林道洪崖不周峰
2006-07-26
打赏
举报
回复
路过~~~
csz_cmy
2006-07-25
打赏
举报
回复
我在想修改栈指针应该是可以达到目的??
int GetInfoEx(int A,...)
{
if(A < 0) return -1;
else
{
SP -= ?;//怎样修改栈指针???
CALL GetInfo;//咋弄?
}
}
jixingzhong
2006-07-25
打赏
举报
回复
必须获取函数的 参数,然诺后传递进去 ..
tailzhou(尾巴) 的 VGetInfo(int A,va_list vl); 类似方式
du51
2006-07-25
打赏
举报
回复
楼上说的对!
我刚才试了一下,除非定义va_list参数,否则不行.地址是错的.
还是回到那个函数本身去改.
tailzhou
2006-07-25
打赏
举报
回复
直接传不行的,得定义一个 类似
VGetInfo(int A,va_list vl); 原形的函数;
不过这样必须修改getinfo函数所在的层的模块;
hearing
2006-07-25
打赏
举报
回复
“关键是我只做中间层!”
不怎么明白LZ的意思,如果是因为参数A<0产生BUG,你完全可以在调用前处理下要传递的参数来避免BUG的发生。
调用?难道不是随便什么地方GetInfo(A,...)就调用了吗?但你必须保证参数的有效性
du51
2006-07-25
打赏
举报
回复
把va_list传进去就行了.
tailzhou
2006-07-25
打赏
举报
回复
/*这里怎么调用原函数???*/
==>
/*这里怎样调用原函数???*/
就不容易让人误会了
lovefreex
2006-07-25
打赏
举报
回复
lz 的意思是不改变原来的函数,重新写个函数修正,关键是来的函数bug是什么~~
tailzhou
2006-07-25
打赏
举报
回复
没仔细看,sorry!
else return GetInfo(A,...); /*这里怎么调用原函数???*/
编译器是不支持这样的参数传递的。
还是改GetInfo最简单;
如果GetInfo需要太多的改动,就在GetInfo所在的模块内,再添加一个这样的函数
VGetInfo(A,va_list vl); //代码重用GetInfo的
du51
2006-07-25
打赏
举报
回复
在GetInfo函数内部加判断
nickgg
2006-07-25
打赏
举报
回复
关键是我只做中间层!
qjzrd
2006-07-25
打赏
举报
回复
没有必要这样吧 你直接在外面加个条家年进行判断A是否小于0
小于0就不调用函数GetInfo
nickgg
2006-07-25
打赏
举报
回复
楼上的干吗呢?
tailzhou
2006-07-25
打赏
举报
回复
可能原来的函数的bug就是对A < 0的情形的处理有错误吧。
if(A < 0) return -1; 这样当a<0的时候,不再调用原来的函数,也就不会有bug了
变参
函数
总结
变参
函数
文章目录
变参
函数
引言用我们的方法探索确定固定参数手动确定
变参
增加
变参
个数寻找问题
变参
函数
参考资料 引言 最近在把一些代码封装成
函数
的时候,遇到一些参数个数可变的情况,为此想到是不是使用
变参
函数
来解决这个问题。但是关于
变参
函数
却一开始就没掌握。今天花时间来看一下这个部分,并且讲总结记录下来。 这里我是参考的其他大神的方式先进行了直接输出
变参
的探索过程,如果不想看此部分,可以通过目录直接跳转到<
变参
函数
>章节进行查看。 我们第一次见到
变参
函数
应该是在C语言的scanf和prin
【C语言】
变参
函数
返回值类型
函数
名(固定参数, ...) {va_list 参数列表;// 定义一个 va_list 类型的变量,用于访问
变参
va_start(参数列表, 固定参数);// 初始化 va_list,指定最后一个固定参数// 使用 va_arg() 宏获取
变参
va_end(参数列表);// 清理 va_list。
变参
函数
的实现
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE
Part 12
变参
函数
欢迎来到 Golang教程系列的第12部分 文章目录什么是
变参
函数
?语法示例和理解
变参
函数
如何工作给
变参
函数
传入一个切片疑难杂症 什么是
变参
函数
?
变参
函数
是一个可以接受参数数量可变的
函数
。 语法 如果一个
函数
的最后一个参数是以 ...T 为标记,则该
函数
的最后一个参数可以接受任何数量类型为 T 的参数。 请注意,一个
函数
仅最后一个参数允许参数可变 示例和理解
变参
函数
如何工作 你是否想过被用来 a...
C语言——
变参
函数
现在网上部分
变参
函数
的资料是有问题的,主要是在用指针的方式去访问参数上,不适用于64位系统。 本文讲解了在64位系统中通过指针和宏两种方式进行
变参
函数
的参数访问和使用,以及
变参
函数
的代表printf的实现。
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章