打印
[ARM入门]

求高手指点

[复制链接]
878|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
maowa_2005|  楼主 | 2014-3-18 14:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近看内核代码,看到好多地方都用到了__INLINE、__STATIC等用法,由于刚开始接触,所以不明白为什么前面要加上__,不能直接用inline,static等关键字吗,类似的还有
interrupt_handler()
{
   .....
}
intr_construct(irq_id,(UNIT32)__interrupt_handler);
其实就是一个将中断号和中断处理函数进行绑定,但是为什么函数调用里面写的是__interrupt_handler,
前面同样加了__,不能写成interrupt_handler吗,求高手指点

相关帖子

沙发
ayb_ice| | 2014-3-18 15:34 | 只看该作者
为的是移植方便,
C89根本就不支持inline

加"__"一般是编译器用的,以防止与用户的定义重名

使用特权

评论回复
板凳
maowa_2005|  楼主 | 2014-3-18 15:53 | 只看该作者
ayb_ice 发表于 2014-3-18 15:34
为的是移植方便,
C89根本就不支持inline

你好,你说的为了方便移植,编译器肯定能识别类似于__INLINE的关键字吧,拿上面的例子说,写成__interrupt_handler,那编译器找中断处理函数的时候是找的interrupt_handler(){}这个函数吗
想知道编译器是怎么处理__的

使用特权

评论回复
地板
ayb_ice| | 2014-3-18 16:23 | 只看该作者
都看内核代码了,这都是基本常识了

如果编译器支持inline则定义
#define __INLINE inline
如果移到别的编译器,且这个编译器不支持inline,则
#define __INLINE

如果移到别的编译器,且这个编译器支持inline,但不是inline,而是Inline(假设)
#define __INLINE Inline

明白?

至于__没有什么特殊,主要避免与用户定义重命名,因为一般用户命名不会用__开头,有些编译器不允许用户命名以__开头

使用特权

评论回复
5
maowa_2005|  楼主 | 2014-3-19 08:27 | 只看该作者
ayb_ice 发表于 2014-3-18 16:23
都看内核代码了,这都是基本常识了

如果编译器支持inline则定义

多谢指点

使用特权

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

本版积分规则

26

主题

76

帖子

2

粉丝