免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2972 | 回复: 8
打印 上一主题 下一主题

__LOCK??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-11 10:38 |只看该作者 |倒序浏览
linux/include/linux/spinlock_api_up.h中关于__LOCK的宏定义:

  27#define __LOCK(lock) \
  28  do { preempt_disable(); __acquire(lock); (void)(lock); } while (0)

先禁止抢占;
lock/unlock匹配检查;
(void)(lock);   请教这句话什么意思?

论坛徽章:
0
2 [报告]
发表于 2008-05-11 12:09 |只看该作者
原帖由 rocky1972 于 2008-5-11 10:38 发表
linux/include/linux/spinlock_api_up.h中关于__LOCK的宏定义:

  27#define __LOCK(lock) \
  28  do { preempt_disable(); __acquire(lock); (void)(lock); } while (0)

先禁止抢占;
lock/unlock匹配 ...

注释已经说的很清楚了
/*
* In the UP-nondebug case there's no real locking going on, so the
* only thing we have to do is to keep the preempt counts and irq
* flags straight, to suppress compiler warnings of unused lock
* variables, and to add the proper checker annotations:
*/
防止编译器警告

论坛徽章:
0
3 [报告]
发表于 2008-05-11 12:20 |只看该作者
原帖由 zx_wing 于 2008-5-11 12:09 发表

注释已经说的很清楚了
/*
* In the UP-nondebug case there's no real locking going on, so the
* only thing we have to do is to keep the preempt counts and irq
* flags straight, to suppress  ...



多谢大侠关注,小弟想知道的就是为什么?

论坛徽章:
0
4 [报告]
发表于 2008-05-11 12:21 |只看该作者
就是说      (void)(lock);   这句话的原理是什么?在gcc中的哪一部分有说明?

论坛徽章:
0
5 [报告]
发表于 2008-05-11 12:24 |只看该作者
原帖由 rocky1972 于 2008-5-11 12:20 发表



多谢大侠关注,小弟想知道的就是为什么?

你在程序中定义了一个变量,但没有使用,通常编译器会有一条“unused variable ……”的警告。
(void)lock一句就是防止这种警告。例如经常也有 (void)printf(.....)的用法来防止某些编译器对不接收返回值的警告。

原理就是一条空语句,gcc哪儿讲这个我就不清楚了。

[ 本帖最后由 zx_wing 于 2008-5-11 12:25 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-05-11 12:30 |只看该作者
小弟明白这样做确实是为了supress complier warnings,编译的时候为了看起来不叫干净。

(void) (_VARIABLE_)
(void) (_FUNCTION_)


用的时候就这样用是吧?

论坛徽章:
0
7 [报告]
发表于 2008-05-11 12:34 |只看该作者
多谢zx_wing
明白了
BOW

论坛徽章:
0
8 [报告]
发表于 2008-05-11 12:35 |只看该作者
原帖由 rocky1972 于 2008-5-11 12:30 发表
小弟明白这样做确实是为了supress complier warnings,编译的时候为了看起来不叫干净。

(void) (_VARIABLE_)
(void) (_FUNCTION_)

用的时候就这样用是吧?

(void) (_VARIABLE_)
(void) (_FUNCTION_)
是什么我不清楚。
反正我的理解就是:放一条语法上合理,但又没有实际用处的语句来防止编译器警告。
至于具体词法上编译器怎么看待,你可以到编译器版去问问各位大牛

论坛徽章:
0
9 [报告]
发表于 2008-05-11 12:40 |只看该作者
多谢zx_wing
再次BOW
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP