关于函数可变参数结束的问题va_arg...

devinside 2008-10-30 04:54:28
msdn的例子里要以一个特殊的值来结束,除此之外还有其他方法吗,首先我不想强制这个特殊值,用户当然也希望写到哪儿算哪儿,而且如果加特殊值,比如0和-1什么的,但用户可能需要这些值传入参数,我这里写的是double,用于坐标,超过栈顶返回的先是两个0.0,然后就乱了,可用户要传两个0.0(原点)是很经常的,请教如何解决
...全文
375 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
vtmain 2012-06-01
  • 打赏
  • 举报
回复
mark, 听听前辈的意见
arong1234 2008-10-31
  • 打赏
  • 举报
回复
接口要清晰、易用可扩展即可,第一个参数有特定功能是非常常见而且比较好的方法(结束元素也是比较好的)
至于2楼的,个人永远不建议这么用。使用汇编语言不仅仅使得你高级语言依赖低级语言,而且必须迫使你对调用堆栈熟悉,增加了复杂度。更关键的是,如果你是接口,每个实现你这个接口的人也一样要这样麻烦一遍
[Quote=引用 4 楼 devinside 的回复:]
不要限制条件,我自己可以这么用,但我给别人写接口不能跟人家说你在第一个参数传一个个数进去,况且有些人写出
function ( 100 , 1.0 , 1.0 )这样的代码就算是他的问题也会来找我麻烦
二楼说的有些深奥,最后有个例子给参照一下
[/Quote]
arong1234 2008-10-31
  • 打赏
  • 举报
回复
这叫什么话?难道第一个参数传个数量进去是很差的设计么?printf这么著名的函数就是这么设计的,有多少人抱怨过printf或者因为自己代码不好而指责printf了?看来楼主还是没有理解软件设计的一些基本思想啊

[Quote=引用 4 楼 devinside 的回复:]
不要限制条件,我自己可以这么用,但我给别人写接口不能跟人家说你在第一个参数传一个个数进去,况且有些人写出
function ( 100 , 1.0 , 1.0 )这样的代码就算是他的问题也会来找我麻烦
二楼说的有些深奥,最后有个例子给参照一下
[/Quote]
arong1234 2008-10-31
  • 打赏
  • 举报
回复
不定参数和它一样资格老,你认为这个是传统,可是printf(const char*, ...)一样是传统
[Quote=引用 5 楼 whoo 的回复:]
遵循古老的传统吧。

function(int argc, char** argv);
[/Quote]
arong1234 2008-10-31
  • 打赏
  • 举报
回复
这种方式是不好的,高级语言的目的就是避免使用低级的语言,隐藏细节
还是用结束元或者根据第一个参数能推导参数个数比较合理
[Quote=引用 2 楼 zhoujianhei 的回复:]
使用汇编语言检查返回地址,可以确定参数个数。
[/Quote]
cnzdgs 2008-10-31
  • 打赏
  • 举报
回复
为什么“不能跟人家说你在第一个参数传一个个数”?接口由谁来定就是谁说了算,如果有人反对,你就让他来定这个接口。
whoo 2008-10-31
  • 打赏
  • 举报
回复
如果参数个数不是很夸张的话,可以用函数重载来明确的执行。 如:

void function(int);
void function(int, char*);
void function(int, char*, int);
void function(int, char*, int, long);


又或者默认参数:
void function(int, char* string="hello", int count = 4, long dist = 100);
whoo 2008-10-30
  • 打赏
  • 举报
回复
遵循古老的传统吧。

function(int argc, char** argv);

devinside 2008-10-30
  • 打赏
  • 举报
回复
不要限制条件,我自己可以这么用,但我给别人写接口不能跟人家说你在第一个参数传一个个数进去,况且有些人写出
function ( 100 , 1.0 , 1.0 )这样的代码就算是他的问题也会来找我麻烦
二楼说的有些深奥,最后有个例子给参照一下
shailen126 2008-10-30
  • 打赏
  • 举报
回复
一楼说的对
void function(int lParamLength, BYTE cbFirst, ...) //lParamLength后面的参数个数
zhoujianhei 2008-10-30
  • 打赏
  • 举报
回复
使用汇编语言检查返回地址,可以确定参数个数。
cnzdgs 2008-10-30
  • 打赏
  • 举报
回复
用第一个参数表示参数的个数。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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