免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 16562 | 回复: 22
打印 上一主题 下一主题

[C] 函数返回值类型不确定怎么办? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-17 11:10 |只看该作者 |倒序浏览
比如有一个结构体
typedef struct
{
int v1;
float v2;
unsigned long v3;
}xxx_t;

写一个函数返回每个成员的值

一般的想法是传一个void * 指针 如 error Get(offset,(void*)addr,size);

如果我想直接用函数返回值作为结果方便调用比如, int a = Get(0); float b = Get(4)这种调用怎么办.

大家给点意见?

论坛徽章:
0
2 [报告]
发表于 2011-02-17 11:24 |只看该作者
回复 1# xiaobird1982


    你的想法不好吧,如果以后添加或删减成员接口你的代码就有问题了,还是传统做法靠得住

论坛徽章:
0
3 [报告]
发表于 2011-02-17 11:27 |只看该作者
添加减少新的成员问题到不是很大  可以用OFFSET参数来调整

我的想法其实是和set函数统一

我的set(index,val)  调用就是set(0,4); set(4,7.6)这样

为了和set 统一, 我期望set函数也具有类型的调用

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2011-02-17 11:32 |只看该作者
参考COM中的Variant类型。

不过我觉得LZ的设计思想上有问题

论坛徽章:
0
5 [报告]
发表于 2011-02-17 11:41 |只看该作者
添加减少新的成员问题到不是很大  可以用OFFSET参数来调整

我的想法其实是和set函数统一

我的set(ind ...
xiaobird1982 发表于 2011-02-17 11:27



    我想看看你怎样用OFFSET参数来调整? 你调整了你就是在否定自己的想法。

论坛徽章:
0
6 [报告]
发表于 2011-02-17 11:43 |只看该作者
设计个结构体,结构体两个成员,一个是指向实际数据的void指针,另外一个是自己规定好的数据类型标识。

论坛徽章:
0
7 [报告]
发表于 2011-02-17 12:00 |只看该作者
6楼的方法不错 LZ可以考虑 你本身的设计确实感觉不太好

论坛徽章:
0
8 [报告]
发表于 2011-02-17 12:05 |只看该作者
可能解释的不清楚

我的想法是尽量简化用户调用接口,以上面例子来说,用户只要知道成员变量的偏移量,调用GET函数就可以返回期望的值. 我的SET(offset,val)函数用户可以不用考虑值的类型,因此我期望能够用同样的办法定义GET函数,不过暂时还没有好的办法.

关于增加成员变量,相对的只是OFFSET变化,对GET函数不会造成什么影响.

P.S. 纯C语言,可插汇编代码

论坛徽章:
0
9 [报告]
发表于 2011-02-17 12:14 |只看该作者
回复 6# davelv


    你的意思是声明一个结构体

typedef struct
{
int type;  // 0:int 1:float balala...
void * addr; //point to real xxx_t variable.
}xxx_type_t;

函数声明成    xxx_type_t  Get(offset);

的确 这个办法可行 不过我设计的目的是简化用户调用,这个方法尽管接口简化了,但用户调用之后还要做解析,另外用户还要声明一个本没有必要的数据成员.

for example,

xxx_type_t val = Get(xxx);
if(val.type == 0)
{}
else if
...

还有一个问题是函数返回值不是指针,有些编译器下会有问题. 而函数又不能直接把内部结构体变量指针直接返回给用户,不安全.

论坛徽章:
0
10 [报告]
发表于 2011-02-17 12:17 |只看该作者
回复 5# baozhao


    offset 是指成员变量相对于结构体基地址的偏移量, 你的想法我没太明白
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP