Linux2.6内核 -- 编码风格(3)
来源:互联网 发布:tp-link路由器网络设置 编辑:程序博客网 时间:2024/06/16 13:39
9.typedef
内核开发者们强烈反对使用 typedef 语句。他们的理由是:
1> typedef 掩盖了数据的真实类型
2> 由于数据类型隐藏起来了,所以很容易因此而犯错误,比如以传值的方式向栈中推入结构
4> 使用 typedef 往往是因为想要偷懒,例如,可能会定义一个这样的形式:
typedef unsigned char uchar
无论如何,尽量少用 typedef。
当然,typedef 也有它施展身手的时候:当需要隐藏变量与体系结构相关的实现细节的时候,当某种类型将来有可能发生变化,而现有程序必须要考虑到向前兼容问题的时候,都需要 typedef 。
10.多用现成的东西
请勿闭门造车。内核本身就提供了字符串操作函数,压缩函数和一个链表接口,所以,直接使用它们就行了,而不要自己再去创造,毕竟,你要知道,你自己定义的接口会比现成的东西差好多。
11.在源码中减少使用 ifdef
我们不赞成在源码中使用 ifdef 预处理指令。你绝不应该在自己的函数中使用如下的实现方法:
#ifdef CONFIG_FOOfoo();#endif相反,应该采取的方法时在 CONFIG_FOO 没定义的时候让 foo 函数为空。
#ifdef CONFIG_FOOstatic int foo(void){/**/}#elsestatic inline int foo(void) {}#endif /*CONFIG_FOO*/这样,你在任何情况下都能调用 foo() 了。
12.结构初始化
结构初始化的时候必须在它的成员前加上结构标识符。这种初始化能避免错误使用其他结构而引发一个初始化错误。它支持使用忽略值。内核代码必须使用新的 C99 标识符格式,就像是下面这样:
struct foo my_foo = {.a = INTIAL_A,.b = INTIAL_B,};其中 a 和 b 都是结构体 foo 的成员,而 INTIAL_A 和 INTIAL_B 是它们对应的初始值。如果一个字段没有给定初始值,那么它就会设置为 ANSI C 规定的默认值(指针被设为 NULL,整形被设为 0,浮点数被设置为 0.0)。举例来说,如果 foo 结构体还有一个 int 型的 c 成员,那么上面的初始化语句执行之后 c 会被设置为 0.
- Linux2.6内核 -- 编码风格(3)
- Linux2.6内核 -- 编码风格(1)
- Linux2.6内核 -- 编码风格(2)
- linux2.4到linux2.6内核调度(3)
- linux2.4到linux2.6内核调度(6)
- linux2.4到linux2.6内核调度(1)
- linux2.4到linux2.6内核调度(2)
- linux2.4到linux2.6内核调度(4)
- linux2.4到linux2.6内核调度(5)
- linux2.4到linux2.6内核调度(7)
- linux2.4到linux2.6内核调度(8)
- linux2.4到linux2.6内核调度(9)
- linux2.4到linux2.6内核调度(10)
- linux2.4到linux2.6内核调度(11)
- linux内核编码风格
- Linux内核编码风格
- Linux内核编码风格
- linux内核编码风格
- 判断栈的压入,弹出序列是否匹配
- 修改mysql默认字符集的两种方法
- UVALive 2088 Entropy (贪心 + 哈夫曼编码)
- 模板作用域中的模板类型的引用
- 使用com.sun.awt.AWTUtilities这个类出现错误
- Linux2.6内核 -- 编码风格(3)
- Qt调用WebService 5 - QJSON
- 修改MYSQL密码的几种常用方法
- window.location.href以post方式传递参数
- php 正则表达式验证数字
- 软件开发,迷茫之时,求帮助
- Java和C#中String直接赋值与使用new创建(==与equals进行比较)的区别
- MySQL修改密码方法总结
- CRM Overview