打印

问一个宏函数的问题。。。。。

[复制链接]
1829|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xxrrpp2000|  楼主 | 2007-7-5 17:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

BOOL valid(const uint *OOT, const uint sdata)
{   
 if(((*OOT) <= (sdata+100)) && ((*OOT) >=(sdata-100)))        
           return TRUE;   
 else    return FALSE;
}
由于该函数在程序中调用的地方极多,而我的程序时间不允许太多消耗在这个函数的调用开销上,因此我想把该函数用宏来替换,请问各位有什么高招?

相关帖子

沙发
xxrrpp2000|  楼主 | 2007-7-5 17:11 | 只看该作者

自己顶一下。。。。。

明天再看有没有人指教。。。。。。谢谢大家了!
要下班了(今晚请人吃饭,破产咯~~~~~~~~)

使用特权

评论回复
板凳
high| | 2007-7-5 18:09 | 只看该作者

宏或者内联

#define valid(OOT, sdata) do {
       statement;
   } while(0)

----------------------------------------------------
inline 的关键字取决你用什么编译器。(inline, __inline  ...)

inline BOOL valid(const uint *OOT, const uint sdata)
{   
if(((*OOT) <= (sdata+100)) && ((*OOT) >=(sdata-100)))        
           return TRUE;   
else    return FALSE;
}

使用特权

评论回复
地板
tjsheep| | 2007-7-5 18:46 | 只看该作者

调用的地方多,那是应该用函数,

只有调用的地方少,而运行的次数多的时候,才适合内联或宏,

使用特权

评论回复
5
gyt| | 2007-7-5 19:56 | 只看该作者

对啊

宏会占去很多程序存储区的

使用特权

评论回复
6
谈的元| | 2007-7-5 20:51 | 只看该作者

说的好

宏会占去很多程序存储区的
 
宏适合那些  要写很多“类似的”程序的地方

使用特权

评论回复
7
ayb_ice| | 2007-7-6 07:39 | 只看该作者

自己把它改成宏不就可以了,是不会还是咋的...

使用特权

评论回复
8
平常人| | 2007-7-6 07:48 | 只看该作者

从另一个角度看:不要传递OOT的指针,直接传递指向的内容

这样总体上不管是函数调用还是宏调用,都可以省下一次指针操作。

使用特权

评论回复
9
xxrrpp2000|  楼主 | 2007-7-6 08:18 | 只看该作者

非常感谢各位的建议

需要说明的是:
1: 调用的地方多,以为着运行的次数也很多,每次大概需要运行60次左右,甚至到70次。。。。。。
2: 程序存储区我不在乎,在乎的是运行时间,所以有必要修改这个函数。
3: 我用的是Keil 7.05的编译器,没看到能支持内联函数的。
4: 比较好的办法也许是用内联,因为如果用宏的,估计就缺少了类型检查了,而且也不能返回BOOL类型值了吧?
5: 平常人说得很对,如果不用指针,应该可以节省一次操作。
与各位探讨。

使用特权

评论回复
10
农民讲习所| | 2007-7-6 08:59 | 只看该作者

BOOL valid(const uint *OOT, const uint sdata)
{   
if(((*OOT) <= (sdata+100)) && ((*OOT) >=(sdata-100)))        
           return TRUE;   
else    return FALSE;
}

#define valid( OOT, sdata )   ( ((*OOT) <= (sdata+100)) && ((*OOT) >=(sdata-100)) )

使用特权

评论回复
11
xxrrpp2000|  楼主 | 2007-7-6 09:32 | 只看该作者

精彩!

到底是所长。。。。。佩服!
我试了一下,效果还不错。
非常感谢。。。。。。

宏的缺点是: 不能进行传入参数的类型检查,如果传入错误的参数类型,恐怕结果会难以想象。
当否?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

86

帖子

0

粉丝