【Linux】Linux内核代码风格

前言

最近想提高Linux相关的技能,所以就先从Linux内核代码风格的习惯开始养起吧,成为一名优秀的Linux工程师是我的梦想~希望和大家一起进步。
之前有在Ubuntu24.04.2和 Windows11上安装neovim,但总是希望依赖Clang-format工具帮我格式化,现在开始我不想依赖这些了,打算开始养成Linux的内核代码风格,当然你也可以选择Google或者Microsoft的风格,个人选择罢了。
如果不是选择Linux内核代码风格以及不用neovim编辑器的同学可以离开了,此贴对你没有帮助。
关于neovim & lazyvim的安装请看我的另一篇帖子。

✅ 一份符合 Linux 内核风格的 Neovim 设置方案
包括:

  • 缩进规则
  • 行宽控制
  • 关闭空格缩进
  • 高亮长行
  • 禁止软换行
  • 启动文件路径说明(Windows 专属)
  • 额外建议:.editorconfig 支持

基本设置

1.Windows11下的neovim配置

虽然不打算依赖Clang-format工具了,但是一些基础的、方便操作的设置我们还是要设置下的,这里看一下怎么在Windows11下设置我们的需要的内容。
首先,在 Windows 上,找到Neovim 的配置文件,它位于:

%USERPROFILE%\AppData\Local\nvim\init.vim

你可以直接输入到“我的电脑”中的地址栏,回车后就会跳转到。
看到 init.lua 文件,它就是要我们要配置的对象。
把内容改成:

-- bootstrap lazy.nvim, LazyVim and your plugins
require("config.lazy")

-- 禁止 clangd 自动格式化(避免破坏 Linux 内核风格)
vim.api.nvim_create_autocmd("FileType", {
  pattern = { "c", "cpp" },
  callback = function()
    -- 禁止保存时格式化
    vim.b.autoformat = false
  end,
})

vim.opt.expandtab = false        -- 用 Tab 而非空格
vim.opt.tabstop = 8              -- Tab 宽度 8
vim.opt.shiftwidth = 8           -- 缩进宽度 8
vim.opt.softtabstop = 8          -- 回退宽度也是 8
vim.opt.smartindent = true       -- 自动缩进
vim.opt.autoindent = true        -- 基于上一行缩进

vim.opt.wrap = false             -- 禁止软换行
vim.opt.colorcolumn = "81"       -- 超出 80 列高亮
vim.cmd("highlight ColorColumn ctermbg=darkgray guibg=lightgray")

vim.opt.number = true            -- 显示行号
vim.opt.mouse = ""               -- 禁用鼠标
vim.opt.syntax = "on"
vim.cmd("filetype plugin indent on")

保存即可,主要是要禁用Clang LSP自动格式化的功能,但保留打代码的时候自动提示功能。

2.Ubuntu下的neovim配置

同样找到init.lua,编辑它

vim .config/nvim/init.lua

内容(与Windows 11一致):

-- bootstrap lazy.nvim, LazyVim and your plugins
require("config.lazy")

-- 禁止 clangd 自动格式化(避免破坏 Linux 内核风格)
vim.api.nvim_create_autocmd("FileType", {
  pattern = { "c", "cpp" },
  callback = function()
    -- 禁止保存时格式化
    vim.b.autoformat = false
  end,
})

vim.opt.expandtab = false        -- 用 Tab 而非空格
vim.opt.tabstop = 8              -- Tab 宽度 8
vim.opt.shiftwidth = 8           -- 缩进宽度 8
vim.opt.softtabstop = 8          -- 回退宽度也是 8
vim.opt.smartindent = true       -- 自动缩进
vim.opt.autoindent = true        -- 基于上一行缩进

vim.opt.wrap = false             -- 禁止软换行
vim.opt.colorcolumn = "81"       -- 超出 80 列高亮
vim.cmd("highlight ColorColumn ctermbg=darkgray guibg=lightgray")

vim.opt.number = true            -- 显示行号
vim.opt.mouse = ""               -- 禁用鼠标
vim.opt.syntax = "on"
vim.cmd("filetype plugin indent on")

将下面文件中关于格式的内容注释掉:
/home/louis/.config/nvim/lua/config/autocmds.lua

代码风格学习

1. 缩进

制表符是 8 个字符,所以缩进也是 8 个字符。
原因:

  • 屏幕连续看了 20 小时之后,大的缩进会使你更容易分辨缩进;
  • 3 级以上的缩进会超过80 个字符的终端,你应该修正你的代码了;
  • 当你的函数嵌套太深的时候可以给你警告;

switch 语句要这样写:

switch (suffix) {
case 'G':
case 'g':
        mem <<= 30;
        break;
case 'M':
case 'm':
        mem <<= 20;
        break;
case 'K':
case 'k':
        mem <<= 10;
        /* fall through */
default:
        break;
}

if语句

// 要这样写
if (condition)
        do_this();
        
// 不要这样写
if (condition) do_this();
// 要这样写
if (condition) {
        do_this();
        do_that();
}

// 不要这样写
if (condition)
        do_this(), do_that();

2. 空格

二元和三元操作符两边都需要加空格,这些都不必多说,比如:

= + - * < > % ! ? : // 等等等等

但一元操作符不要加空格,比如:

value = ! value;   // 错误示范
i ++;              // 错误示范 
Node -> value = 10;// 错误示范

if / switch / case / for / do / while等,后面都要加1个空格:

// 要这样写
if (condition)
        do_this();

// 不要这样写
if(condition) 
        do_this();
// 要这样写
s = sizeof(struct file);

// 不要这样写
s = sizeof( struct file );

指针的*号请靠近变量名而不是类型:

// 要这样写
int *ptr = &value;
struct *dev get_device(char *ptr, int **reptr);

// 不要这样写
int* ptr = &value;
struct* dev get_device(char* ptr, int** reptr);

3. 命名

// 要这样写
int count_active_user();

// 不要这样写
int cntuser();

类似的,如果一个计数变量名字叫 i ,并且不会有歧义的风险的话,那就定义为i ,定义为loop_counter毫无意义,故,本地命名应该简短,比如tmp就可以用来表示任意类型的临时变量。

Conference

Linux内核代码风格-中文版
https://www.kernel.org/doc/html/v4.15/translations/zh_CN/coding-style.html

你可能感兴趣的:(Linux,linux)