| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5512 人关注过本帖
标题:关于用宏来定义函数。。
只看楼主 加入收藏
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
结帖率:100%
收藏
 问题点数:0 回复次数:16 
关于用宏来定义函数。。
有一个函数的返回值是一个结构类型。。
那么怎么把它改成一个用宏定义的函数呢。
搜索更多相关主题的帖子: 函数 定义 返回值 结构 类型 
2008-07-15 08:48
woshiyun
Rank: 1
等 级:新手上路
威 望:2
帖 子:348
专家分:0
注 册:2008-6-16
收藏
得分:0 
好抽象,来段代码吧
一般函数会返回结构的指针,还真没见过多少直接返回结构的。
2008-07-15 10:25
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
定义一个复数结构,实现了前缀自增prefix_inc(自定义运算,只自增实部),求两个复数中模较大一个max_mod
既然要使用返回值,也可以将接受返回值的变量作参数传递进去,像add2一样。

只想到这两种方法,感觉都没什么意义,可以用inline函数代替。
大多数宏函数都可以用inline代替,宏还是少用的好。

程序代码:
typedef struct{
double real;
double imag;
}complix_t;

#define  prefix_inc(a)  (++a.real,a)
#define  max_mod(a,b)   ((a.real*a.real + a.imag*a.imag) > (b.real*a.real + b.imag*a.imag) ? a: b)
#define  add2(a,b,sum)  {sum.real = a.real + b.real; sum.imag = a.imag + b.imag;}

int main(int argc, char *argv[])
{
    complix_t a={1,1},
          b={2,2},
          max,
          sum;
    max = max_mod (a,b);
    printf("%lf+%lf*i\n",max.real,max.imag);

    add2(a,b,sum);
    printf("%lf+%lf*i\n",sum.real,sum.imag);

    return 0;
}

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-07-15 10:26
界水乘风
该用户已被删除
收藏
得分:0 
回复 3# VxWorks 的帖子
提示: 作者被禁止或删除 内容自动屏蔽
2008-07-15 10:32
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
C99不是C吗

至少我的C编译器C99之前就支持inline了

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-07-15 10:34
界水乘风
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2008-07-15 10:35
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
现在嵌入式都可以用eclipse写c了,后台是gcc
现在用c的人用的编译器不支持inline是少数,也该淘汰了

>>c语言中是没有inline的,gcc先把inline引入c中,在c99中加入到标准c。
什么是c语言?标准C不是C?

楼主的问题用inline要比宏函数好的多,只有极少数宏函数不能简单的用inline替代,我相信楼主这次还没有遇到这种情况,小概率事件不考虑。

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-07-15 10:46
界水乘风
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2008-07-15 10:49
VxWorks
Rank: 3Rank: 3
来 自:WindRiver
等 级:论坛游民
威 望:6
帖 子:859
专家分:68
注 册:2007-11-24
收藏
得分:0 
名声大了果然有好处

你以后见了我就闪远些

为了防止世界被破坏,为了守护世界的和平,贯彻爱与真实的邪恶,可爱又迷人的反派角色,VxWorks!
Don't ask me any question.I'm just here to buy soy sauce.
2008-07-15 10:55
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
收藏
得分:0 
typedef struct {
int a;
int b;
} _t;
_t l(int x)
{
_t t;
t.a=322;
t.b=x;
return t;
}
这样的函数怎么办呢。。。

Murphy's Law :
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
2008-07-15 11:24
快速回复:关于用宏来定义函数。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016204 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved