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)
为什么要用do{}while(0)呢?看下面这个例子:
如果使用:
上面的代码就变成了:
会有编译错误,那如果加上{}改成:
代码就变成:
同样会有编译问题。更糟糕的是在一些情况下虽然编译可以通过不过出现逻辑不一致的问题,而使用do{}while(0)就能解决这样的问题,所以当在宏中出现多条语句的时候就应该使用do{}while(0)。
3. list_head
在linux内核中,linux_head使用相当普遍,有许多地方对list_head做了详细的描述,这里就不赘述了,其核心是
通过list_head在struct中的偏移量找到当前struct的地址。
原文链接: https://www.cnblogs.com/xuczhang/archive/2010/03/26/1697065.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/9192
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!