变参函数

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 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
dick_song 2006-07-26
  • 打赏
  • 举报
回复
同意在原函数上改,另写一个函数不是不行,用va_list就可以把参数正确的传入,但这样的风格不好。既然您是写中间层的,您怎样保证使用者会call GetInfoEx而不再call GetInfo呢?GetInfo里依旧是有bug啊!
至于在调用GetInfo时做判断的想法也是不好的风格,因为内部的问题就应该在内部解决,否则这样的代码会很难维护。
adintr 2006-07-26
  • 打赏
  • 举报
回复
先把 GetInfo 的参数是怎么确定的弄清楚,比如是用前面的 int 来表示参数个数,或是用什么结束标识来表示参数结束。中间可变参数的类型是怎么确定的,等等。
然后把传进来的参数分析出了,再传给原函数。
  • 打赏
  • 举报
回复
路过~~~
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了

69,371

社区成员

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

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