checkpatch工具是一种代码检查工具,主要是对Linux编程代码进行静态检查,会指出编程的一些规范和代码风格问题。最近用来对U-Boot框架下编写的驱动代码进行检查,记录一些心得。
一、如何使用
1.使用指令
find -name "checkpatch.pl"
查找工具脚本路径。
2.使用指令
pwd
查看需要检查的文件路径(用这个确保不会错,被自以为是坑过)。
3.cd切换到Checkpatch脚本所在路径,使用指令
./checkpatch.pl --no-tree -f /路径/文件.c
就会输出文件的检查结果。
二、常见错误与警告
1.代码行末尾多余的空格;
2.块注释的*是否对齐,正确如下;
/*
* This function performs some important
* operation and needs a detailed comment.
* asterisk, aligned properly.
*/
3.换行符在Linux下应该是LF(\n),而不是CRLF(\r\n)(注:在windows系统下)
以Vscode为例:在vscode上的右下角将CRLF(windows风格行结尾)改为LF(linux或unix行结尾)
4.缩进的正确用法应该是Tab,而不是空格,必须先用Tab、再用空格(这种组合是可以用的);
提示错误:code indent should use tabs where possible
5.大括号还有运算符两侧应该要有缩进;
提示错误:space required after that close brace '}'
6.变量声明代码段结束后需要加一个空行。
int x = 10;
int y = 20;
x = x + y;
7.大括号 {
不应该单独放在新的一行,而是应该和它前面的代码在同一行。
void my_function() {
// function body
}
三、未完待续
解决windows环境下编辑的uboot代码使用linux环境下checkpatch.pl工具检查后,每一句后面有+^M$的错误提示;使用下面语句进行解决:
e ++ff=unix
%s/[^[:print:]]$//g
1)Tab键与空格键能混用,但要先tab、后空格;
2)变量声明、定义要与后面的赋值操作语句空一行;
3)+^I$
表示行尾存在制表符:
# 使用sed删除行尾制表符和空格 sed -i 's/[ \t]*$//' your_file.c
your_file.c是文件路径+文件
4) ++前不能有空格:fnum++
5)for、if只有一行不需要加括号{};
6) 在使用printf之前的 \n 不需要空格符;
比如:printf("A is b\n"); b与\n就不需要空格;
- 内核编码规范要求:
- 控制语句:关键字后必须添加空格,如
if (condition)
。 - 函数定义与调用:函数名与左括号之间不添加空格,如
void func(void)
。 - 宏定义:宏名称与参数列表之间不添加空格,如
#define MACRO(arg)
。
- 控制语句:关键字后必须添加空格,如