社区
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,...); /*这里怎么调用原函数???*/
}
...全文
264
17
打赏
收藏
变参函数
原有一个函数 int GetInfo(int A,...);//这个函数有BUG! 现在要编一函数修正它 int GetInfoEx(int A,...) { if(A < 0) return -1; else return GetInfo(A,...); /*这里怎么调用原函数???*/ }
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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语言里参数是很重要的,这篇文档就详细的讲述了
变参
函数
c语言
变参
函数
--转载[定义].pdf
c语言
变参
函数
--转载[定义].pdf
UART高级实验-可
变参
函数
这是在256M的mini2440的板子上实现UART的可
变参
函数
,编译是用的是韦东山的方法,使用的是uart0,TXD0--GPH2,RXD0--GPH3,下载下来复制到linux中直接使用make命令即可编译出main.bin,利用supervivi下载到板子上可以再超级终端看到输出“Uart0_Printf test output is:10”
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章