| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 550 人关注过本帖
标题:讨论下 这样些写有什么好处?
只看楼主 加入收藏
linkang1024
Rank: 2
等 级:论坛游民
帖 子:90
专家分:83
注 册:2011-10-10
结帖率:70.83%
收藏
已结贴  问题点数:20 回复次数:7 
讨论下 这样些写有什么好处?
  1 #include <stdio.h>
  2
  3 #define min(x,y)({ \
  4         typeof(x) _x = (x); \
  5         typeof(y) _y = (y); \
  6         (void) (&_x == &_y);\
  7         _x < _y ? _x : _y;})
  8
  9
 10 int main(void)
 11 {
 12         int a=5;
 13         int b=6;
 14         int c=min(a,b);
 15         printf("how if will be%d\n",c);
 16         return 0;
 17 }
~                           

这个是内核定义的min函数 ,而我们一般写大小对比都是以下面这种形式

  1 #include <stdio.h>
  2
  3 int min(x,y)
  4 {
  5         x<y?x:y;
  6 }
  7
  8
  9 int main(void)
 10 {
 11         int a=5;
 12         int b=6;
 13         int c=min(a,b);
 14         printf("how is wil be %d\n",c);
 15         return 0;
 16 }
~           

第一种写法有什么好处?真心看不懂。
搜索更多相关主题的帖子: return include 
2013-06-27 09:18
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:10 
typeof(x) _x = (x);
typeof(y) _y = (y);
避免表达式重复计算

(void) (&_x == &_y);
判断类型是否相同

_x < _y ? _x : _y;
这个你当然懂
2013-06-27 09:23
wyw19880809
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:178
专家分:738
注 册:2013-3-14
收藏
得分:10 
宏定义的比较大小,在程序生成的时候是直接替换,没有函数调用,节约空间。一般情况。是不用对空间的使用进行过多考虑的,但是有的时候 会受硬件方面的限制,对空间的使用尤其需要节省

[ 本帖最后由 wyw19880809 于 2013-6-27 09:47 编辑 ]
2013-06-27 09:41
linkang1024
Rank: 2
等 级:论坛游民
帖 子:90
专家分:83
注 册:2011-10-10
收藏
得分:0 
回复 楼主 linkang1024
大哥  我想请教个问题,就是现在我学做内核的驱动,但是我看代码的时候发现很多结构体我都没见过,也不知道从何查起,可以教个学习方法么?
2013-06-27 14:33
wyw19880809
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:178
专家分:738
注 册:2013-3-14
收藏
得分:0 
回复 4楼 linkang1024
这个结构体 是自定义的啊!!!定义结构体也就那么几种方法。需要注意的是边界对齐问题
2013-06-27 14:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
实际上没什么好处。

授人以渔,不授人以鱼。
2013-06-27 19:07
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
以下是引用TonyDeng在2013-6-27 19:07:25的发言:

实际上没什么好处。

避免表达式重复计算,比如 foo() < bar() ? foo() : bar(); 要么foo()调用两次bar()一次,要么bar()调用两次foo()一次。

type a = foo();
type b = bar();
a < b ? a : b;
只需要foo()调用一次,bar()调用一次。
2013-06-28 08:52
ybj1990
Rank: 2
等 级:论坛游民
帖 子:16
专家分:51
注 册:2013-6-9
收藏
得分:0 
mark
2013-06-28 09:46
快速回复:讨论下 这样些写有什么好处?
数据加载中...
 
   



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

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