| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3590 人关注过本帖
标题:说说你见过哪些拍案叫绝的C代码?
取消只看楼主 加入收藏
mindfulness
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:27
专家分:110
注 册:2021-5-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
说说你见过哪些拍案叫绝的C代码?
说说你见过哪些拍案叫绝的C代码,大佬们一起来聊聊。
我先说两个kenrel的秀儿

1. container_of 的实现

这个由元素到结构体的宏真的秀:((type *)0
程序代码:
#define container_of(ptr, type, member) ({              \         
const typeof( ((type *)0)->member ) *__mptr = (ptr);    \         
(type *)( (char *)__mptr - offsetof(type,member) );})

#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)


2. wake up events 计数
一个32位数据分上半部16位和下半部16位,用原子操作同时更新
程序代码:
  53 static void split_counters(unsigned int *cnt, unsigned int *inpr)
  54 {
  55         unsigned int comb = atomic_read(&combined_event_count);
  56
  57         *cnt = (comb >> IN_PROGRESS_BITS); //处理完成的
  58         *inpr = comb & MAX_IN_PROGRESS; // 正在处理的
  59 }
     if  active 
  547         cec = atomic_inc_return(&combined_event_count);
       if deactive
  677         cec = atomic_add_return(MAX_IN_PROGRESS, &combined_event_count);
搜索更多相关主题的帖子: type 代码 member unsigned int 
2021-05-20 02:24
mindfulness
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:27
专家分:110
注 册:2021-5-8
收藏
得分:0 
这两个运用是linux kernel的代码,对新手来说可能不太能理解,

但是是真真是“怎一个妙字了得”,这代码,简直比A片还让人剌激!

/*
*  Simple love, simple C.
*/
2021-05-20 02:30
mindfulness
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:27
专家分:110
注 册:2021-5-8
收藏
得分:0 
没有Cer来分享一下吗?

/*
*  Simple love, simple C.
*/
2021-05-22 06:12
mindfulness
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:27
专家分:110
注 册:2021-5-8
收藏
得分:0 
回复 4楼 lin5161678

虽然也算是个办法,只是,可读性和可拓展性也太差了些,,

/*
*  Simple love, simple C.
*/
2021-05-23 05:39
mindfulness
Rank: 3Rank: 3
等 级:论坛游侠
威 望:3
帖 子:27
专家分:110
注 册:2021-5-8
收藏
得分:0 

罢了,想来是新人多,老人少。
新人又是求助的多,分享的少,
看来咱论坛的技术环境还是有待改善啊。

/*
*  Simple love, simple C.
*/
2021-05-23 07:30
快速回复:说说你见过哪些拍案叫绝的C代码?
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019099 second(s), 9 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved