代码风格与格式
Linux 编程规范的核心在于统一性与可读性,清晰的代码风格是团队协作的基础。

1 缩进与空格
- 缩进:统一使用 4 个空格进行缩进,避免使用 Tab 键,因不同编辑器对 Tab 的解析可能存在差异,导致格式混乱。
- 大括号位置:左大括号 不另起新行,紧跟函数定义或语句块后;右大括号 独占一行,与对应的左大括号垂直对齐,
int func(int arg) { if (arg > 0) { return 1; } return 0; } - 空格使用:在关键字(如
if、for、while)后、操作符(如 、、、)两侧需添加空格,增强可读性;括号内侧无需空格,如func(arg1, arg2)而非func( arg1, arg2 )。
2 行长度与换行
- 单行代码长度建议不超过 80 列,超过时需合理换行,换行时优先在操作符后分割,新行与上一行同级别缩进,或增加 8 空格以体现层级关系,
result = long_variable_name + another_long_variable_name + third_long_variable_name; - 函数参数过长时,可在逗号后换行,每个参数单独一行,右括号与函数名对齐,
int func(int arg1, int arg2, int arg3, int arg4) { // 函数体 }
命名规范
规范的命名能提升代码的自解释性,降低维护成本。
1 变量与函数
- 变量名:采用小写字母加下划线组合,如
user_count、max_buffer_size;避免使用单字母变量(除循环计数器i、j、k外),变量名需体现其用途。 - 函数名:小写字母加下划线,动词开头,如
get_user_data()、calculate_sum();私有函数可加前缀__(如__internal_func()),但需谨慎使用,避免过度暴露内部细节。
2 常量与宏
- 常量:全大写字母加下划线,如
MAX_CONNECTIONS、DEFAULT_TIMEOUT;使用const关键字定义编译时常量,优先宏定义,#define MAX_BUFFER_SIZE 1024 const int DEFAULT_PORT = 8080;
- 宏函数:全大写加下划线,参数需用括号包裹,避免操作符优先级问题,如:
#define SQUARE(x) ((x) * (x))
3 结构体与类型
- 结构体:采用
struct_前缀加驼峰命名,如struct_UserInfo;成员变量与变量名规范一致,但可加m_前缀(非强制,需团队统一),如m_user_id。 - 枚举:使用
enum_前缀,枚举值全大写加下划线,如:enum_StatusCode { STATUS_OK = 0, STATUS_ERROR = 1, STATUS_TIMEOUT = 2 };
注释与文档
注释是代码的“说明书”,需简洁、准确,避免冗余。

1 注释风格
- 单行注释:使用 ,注释内容与代码同行,或上方单独一行,
// 计算用户总数 int user_count = get_user_count();
- 多行注释:使用 ,用于函数、复杂逻辑或算法说明,
/* * 快速排序函数 * @param arr 待排序数组 * @param left 左边界索引 * @param right 右边界索引 */ void quick_sort(int arr[], int left, int right);
2 文档注释
- 函数文档:采用 Doxygen 风格,包含函数功能、参数说明、返回值及可能的异常,
/** * @brief 从数据库获取用户信息 * @param user_id 用户ID * @param[out] user_info 输出用户信息结构体 * @return 0成功,-1失败 */ int get_user_info(int user_id, struct_UserInfo *user_info);
- 文件头注释:每个源文件需包含版权声明、作者、修改日期及功能概述,
/* * Copyright (c) 2023 Company Name * Author: Author Name * Date: 2023-10-01 * Description: 用户管理模块实现文件 */
错误处理与资源管理
Linux 系统强调“一切皆文件”,资源管理需严谨,避免内存泄漏与未定义行为。
1 错误处理
- 返回值检查:函数调用后需立即检查返回值,尤其是涉及系统调用或动态内存分配的场景,
FILE *fp = fopen("data.txt", "r"); if (fp == NULL) { perror("Failed to open file"); return -1; } - 错误码定义:使用枚举或宏定义清晰的错误码,避免魔法数字(如
-1、-2),并通过注释说明其含义。
2 资源释放
- RAII 原则:在 C 语言中,通过
goto统一错误处理路径释放资源(如文件、内存、锁),int func() { int *ptr = malloc(sizeof(int)); if (ptr == NULL) { return -1; } FILE *fp = fopen("temp.txt", "w"); if (fp == NULL) { free(ptr); return -1; } // 业务逻辑 fclose(fp); free(ptr); return 0; } - 智能指针(C++):在 C++ 项目中,优先使用
std::unique_ptr或std::shared_ptr管理动态资源,避免裸指针导致的内存泄漏。
模块化与可维护性
良好的模块化设计能提升代码复用性与可测试性。

1 单一职责原则
- 每个函数或模块应专注于单一功能,避免“上帝函数”(承担过多逻辑),文件操作、数据解析、业务计算应拆分为独立函数。
- 头文件与源文件分离:头文件(
.h)声明接口,源文件(.c/.cpp)实现具体逻辑,避免在头文件中暴露实现细节。
2 依赖管理
- 头文件保护:每个头文件需使用宏定义防止重复包含,格式为
__FILENAME_H__,#ifndef USER_UTILS_H #define USER_UTILS_H // 头文件内容 #endif
- 减少耦合:避免循环依赖,通过接口抽象、回调函数等方式降低模块间依赖,
// 模块A.h typedef void (*CallbackFunc)(int result); void module_a_func(CallbackFunc callback);
Linux 编程规范的核心是“简洁、清晰、可维护”,规范的制定不仅是为了工具链的兼容性,更是为了提升代码质量与团队协作效率,开发者需在实践中严格遵循,并结合项目特点灵活调整,最终形成一套符合团队需求的编码标准。















