游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2300|回复: 7

请教一个关于函数参数的问题

[复制链接]

5

主题

115

帖子

115

积分

注册会员

Rank: 2

积分
115
发表于 2006-10-23 21:09:00 | 显示全部楼层 |阅读模式
在函数声明为:
int func(float t, DWORD dwID, std::wstring szName, int first, ... )
的函数中,如何才能正确的读取参数的值呢?
谢谢~~

5

主题

115

帖子

115

积分

注册会员

Rank: 2

积分
115
 楼主| 发表于 2006-10-23 21:13:00 | 显示全部楼层

补充一下函数体

{
        int count = 0, sum = 0, i = first;
        va_list marker;

        float f;
        DWORD id;
        std::wstring name;

        va_start( marker, f );     // 读取无效数据

        id = va_arg( marker, DWORD);
        name = va_arg( marker, std::wstring);

        while( i != -1 )
        {
                sum += i;
                count++;
                i = va_arg( marker, int);
        }
        va_end( marker );            
        return( sum ? (sum / count) : 0 );
}

12

主题

124

帖子

124

积分

注册会员

Rank: 2

积分
124
QQ
发表于 2006-10-23 22:14:00 | 显示全部楼层

Re: 请教一个关于函数参数的问题

ada_2008: 请教一个关于函数参数的问题

在函数声明为:
int func(float t, DWORD dwID, std::wstring szName, int first, ... )
的函数中,如何才...



“正确的读取参数值”是什么意思?

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-10-24 11:18:00 | 显示全部楼层

Re:请教一个关于函数参数的问题

通常使用...传递参数就是属于不良设计
函数使用者无法从其声明了解其用意

真的要用
建议参考sprintf源码
另外www.vckbase.com的电子杂志中有相关介绍,请自行参考

5

主题

115

帖子

115

积分

注册会员

Rank: 2

积分
115
 楼主| 发表于 2006-10-24 12:54:00 | 显示全部楼层

Re:请教一个关于函数参数的问题

to cosfunz:
如果我声明为
int func(int first, ... )
按照文档方法就可以正确读取参数,但如果参数不同的话,就能正确读取。如果实现过类似
sprintf()的函数,你就知道我在说什么。

----------------------------------------
to 千里马肝:
这种情况确实很少地方需要,不过有些地方用这种方法实现是很方便解决问题的。你说的地方我会去看看的。

谢谢两位的回答。

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2006-10-24 18:02:00 | 显示全部楼层

Re:请教一个关于函数参数的问题

读圣剑2的msgbox相关代码

12

主题

124

帖子

124

积分

注册会员

Rank: 2

积分
124
QQ
发表于 2006-10-24 20:06:00 | 显示全部楼层

Re:请教一个关于函数参数的问题

明白你的意思了。同意千里马肝的说法。

0

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2006-10-26 02:17:00 | 显示全部楼层

Re:请教一个关于函数参数的问题

初学者,以后多多指教。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 16:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表