免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xiaobird1982
打印 上一主题 下一主题

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

论坛徽章:
0
11 [报告]
发表于 2011-02-17 12:35 |只看该作者
我初步的想法是 直接读R0寄存器 但不确定在我读的时候已经被函数声明的类型给格式化了

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
12 [报告]
发表于 2011-02-17 13:14 |只看该作者
本帖最后由 w_anthony 于 2011-02-17 13:16 编辑

Get函数的调用者是否知道所需的返回类型?如果它知道,可以把函数的返回类型设计成union,比如
union XXX
{
    int i;
    float f;
    unsigned long ul;
};
int a = Get(0).i;
float b = Get(4).f;
不过貌似与Get返回void*相比没啥进步,因为
int a = *(int*)Get(0);
float b = *(float*)Get(4);
差不了多少。

如果用C++还有无耻的方法,可以设计一个类
class XXX
{
public:
    operator int() {return i;}
    operator float() {return f;}
public:
    int i;
    float f;
    unsigned long ul;
}
Get函数返回XXX类型,这样可以直接写
int a = Get(0);
float b = Get(4);

论坛徽章:
0
13 [报告]
发表于 2011-02-17 20:32 |只看该作者
回复 10# xiaobird1982


    我的意思是结构成员可能会变化(增或减),你的接口固定了offset,所以不能适应变化。

论坛徽章:
0
14 [报告]
发表于 2011-02-18 02:04 |只看该作者
c++0x  tuple

论坛徽章:
1
白羊座
日期:2014-01-14 17:31:01
15 [报告]
发表于 2011-02-18 08:39 |只看该作者
这种做法是不是使接口调用更加复杂,

论坛徽章:
0
16 [报告]
发表于 2011-02-18 10:35 |只看该作者
回复 13# baozhao


    offset正是测量成员变化用的

论坛徽章:
0
17 [报告]
发表于 2011-02-18 11:08 |只看该作者
为啥非要这么写呢。分开写几个函数接口不行么。
我不觉得这种设计有明显的好处

论坛徽章:
0
18 [报告]
发表于 2011-02-18 13:16 |只看该作者
回复 16# xiaobird1982


    你没有懂我的意思。
    你说的Get(0) 中的0就是固定

举个例子
  struct type{
     int a;
}
偏移0 对应a;

假如在前面添加一个成员  

struct type{
    int  b;
     int a;
}
偏移0 对应b;

也就是你原来的代码就崩溃了。

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
19 [报告]
发表于 2011-02-18 19:50 |只看该作者
返回值不定可以返回一个结构体套union....
不过那个很恶心

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
20 [报告]
发表于 2011-02-20 20:25 |只看该作者
比如有一个结构体
typedef struct
{
int v1;
float v2;
unsigned long v3;
}xxx_t;

写一个函数返回 ...
xiaobird1982 发表于 2011-02-17 11:10



    int Get_int(int offset,void *stu);
    short Get_short(int offset,void *stu);
........
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP