linux下的C语言编码风格

一、缩进

  1. 语句行首最好是8个字符的缩进
switch (suffix) {
case 'G':
case 'g':
		mem <<= 30;
		break;
case 'M':
case 'm':
		mem <<= 20;
		break;
case 'K':
case 'k':
		mem <<= 10;
		fallthrough;
default:
		break;
}

二、换行

  1. 一行只有一条语句,错误示范如下:
if (condition) do_this;
  1. 长度超过80另起一行,但不要折断字符串

三、花括号

  1. 非函数语句,左花括号放在最后,且与前面空一格
if (x is true) {
		we do y
}
  1. 函数语句,左花括号另起一行
int function(int x)
{
		body of function
}
  1. do-while语句
do {
		body of do-loop
} while (condition);
  1. if-else语句
if (x == y) {
		..
} else if (x > y) {
		...
} else {
		....
}
  1. 单条语句不需要使用花括号
if (condition)
		do_this();
else
		do_that();
while (condition) {
		if (test)
				do_something();
}

四、空格

  1. 关键字if, switch, case, for, do, while后面接空格
if (condition)
		action();
  1. sizeof, typeof, alignof等关键字后面不需要接空格
s = sizeof(struct file);
  1. 括号内两边不需要加空格,错误示范如下:
s = sizeof( struct file );
  1. 指针符号要挨着数据名
char *linux_banner;
unsigned long long memparse(char *ptr, char **retptr);
char *match_strdup(substring_t *s);
  1. 二元或三元运算符= + - < > * / % | & ^ <= >= == != ? :两边要加空格
s = a + b;
  1. 一元运算符& * + - ~ !不用加空格
*b = &a;
  1. 递增++和递减–不需要加空格
a++;
  1. 结构体相关.和->不用加空格
file.open();

五、命名

  1. 尽量避免混合大小写,变量名要求简洁明了,如临时变量定义:
int tmp;
  1. 全局变量或函数可以使用比较详细的描述性的名称
count_active_users();
  1. 局部变量尽量简短,计数变量的定义:
int i;

六、类型定义

  1. 尽量避免使用typedef定义结构体结构体指针,如下面的vps_t,让人完全看不出来a是个什么类型的变量
vps_t a;
  1. 使用如下方式来声明结构体结构体指针,清晰明了
struct virtual_container *a;
  1. 对外不透明的结构体结构体指针类型可以用typedef来定义,如定义一个pte_t类型,你不需要了解它的具体内容
  2. 一些整形数据可以用typedef加以区分,如u8、u16、u32分别被定义成不同长度的整型数据

七、函数

  1. 一个函数的局部变量尽量不要超过5-10个,否则就该思考如何将其分解成更小的部分
  2. 函数与函数之间隔一行
  3. 导出函数紧随函数其后
int system_is_up(void)
{
		return system_state == SYSTEM_RUNNING;
}
EXPORT_SYMBOL(system_is_up);
  1. 在函数原型中,写全参数名及其数据类型

八、注释

  1. 注释一般放在函数的前面,描述函数的功能,风格如下:
/*
 * This is the preferred style for multi-line
 * comments in the Linux kernel source code.
 * Please use it consistently.
 *
 * Description:  A column of asterisks on the left side,
 * with beginning and ending almost-blank lines.
 */

九、宏定义

  1. 宏定义常量一般为大写
#define CONSTANT 0x12345
  1. 宏定义函数可以用小写,包含多条语句时,写在do-while块中
#define macrofun(a, b, c)			\
		do {					\
			if (a == 5)			\
				do_this(b, c);		\
		} while (0)
  1. 不要在宏定义中使用return语句,错误示范:
#define FOO(x)					\
		do {					\
			if (blah(x) < 0)		\
				return -EBUGGERED;	\
		} while (0)
  1. 宏定义不能依赖本地变量,错误示范:
#define FOO(val) bar(index, val)
  1. 宏定义要使用括号以确定优先级
#define CONSTANT 0x4000
#define CONSTEXP (CONSTANT | 3)

十、返回值

  1. 如果函数名是一个动作或命令,则执行成功返回0,否则返回其他;如果函数名是询问,则执行成功返回1,否则返回0

十一、条件编译

  1. 在#endif后面给上注释
#ifdef CONFIG_SOMETHING
	...
#endif /* CONFIG_SOMETHING */

参考资料:https://www.kernel.org/doc/Documentation/process/coding-style.rst

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chvngzhvng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值