社区
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,...); /*这里怎么调用原函数???*/
}
...全文
260
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语言
变参
函数
设计
C语言
变参
函数
设计
变参
函数
的C程序
自己写的
变参
函数
,printf
函数
的实现(可输出整数,字符,字符串)
变参
函数
.pdf
在c语言里参数是很重要的,这篇文档就详细的讲述了
变参
函数
模拟printf和scanf可
变参
函数
的实现
模拟printf和scanf可
变参
函数
的实现
UART高级实验-可
变参
函数
这是在256M的mini2440的板子上实现UART的可
变参
函数
,编译是用的是韦东山的方法,使用的是uart0,TXD0--GPH2,RXD0--GPH3,下载下来复制到linux中直接使用make命令即可编译出main.bin,利用supervivi下载到板子上...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章