1.空操作循环的注意点
在有些时候我们必要用一些while (condition)或for (;condition;)这样的循环空操作。
但是这里也是一个易错点,经常习惯性的不用{},或者习惯性的加上了分号。
坏习惯
while (condition);
较好的习惯
while (condition) {
}
建议的习惯
while (condition) {
NULL;
}
在内核编程中,我们可以使用cpu_relax()来代替NULL,使CPU与能耗更加优秀
while (condition) {
cpu_relax();
2.特定参数类型的运算宏,最好使用typecheck来测试参数类型是否符合要求;
普通用法
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
建议用法
#define MAX(a, b) typecheck(typename, a) && typecheck(typename, b) && (((a) > (b)) ? (a) : (b))
这里看似写的很复杂,但实际上可以利用内联函数进行代替,内联函数相对宏的最大一个优势点就是带有参数类型检测。
在有些时候我们必要用一些while (condition)或for (;condition;)这样的循环空操作。
但是这里也是一个易错点,经常习惯性的不用{},或者习惯性的加上了分号。
坏习惯
while (condition);
较好的习惯
while (condition) {
}
建议的习惯
while (condition) {
NULL;
}
在内核编程中,我们可以使用cpu_relax()来代替NULL,使CPU与能耗更加优秀
while (condition) {
cpu_relax();
}
这里如果不是较严格的退出时间,可以使用schedule()来替换cpu_relax.
2.特定参数类型的运算宏,最好使用typecheck来测试参数类型是否符合要求;
普通用法
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
建议用法
#define MAX(a, b) typecheck(typename, a) && typecheck(typename, b) && (((a) > (b)) ? (a) : (b))
这里看似写的很复杂,但实际上可以利用内联函数进行代替,内联函数相对宏的最大一个优势点就是带有参数类型检测。