[Linux]c in Linux Kernel

 

1. key word from c++

inline –> __inline__

asm –> __asm__

这里在关键字前后加上"__"的原因是inline等c++的关键字不是c的关键字,为了避免冲突。

2. attribute属性描述

struct foo {
    char a;
    int x;
}attribute__ ((packed));

比如上述代码就是压缩struct的存储方式,如果没有压缩就是8个BYTE,而packed之后是4BYTE。

3. do{}while(0)

image

为什么要用do{}while(0)呢?看下面这个例子:

image

如果使用:

image 

上面的代码就变成了:

image

会有编译错误,那如果加上{}改成:

image

代码就变成:

image

同样会有编译问题。更糟糕的是在一些情况下虽然编译可以通过不过出现逻辑不一致的问题,而使用do{}while(0)就能解决这样的问题,所以当在宏中出现多条语句的时候就应该使用do{}while(0)。

3. list_head

在linux内核中,linux_head使用相当普遍,有许多地方对list_head做了详细的描述,这里就不赘述了,其核心是

image

通过list_head在struct中的偏移量找到当前struct的地址。

原文链接: https://www.cnblogs.com/xuczhang/archive/2010/03/26/1697065.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    [Linux]c in Linux Kernel

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/9192

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月6日 下午8:40
下一篇 2023年2月6日 下午8:40

相关推荐