Linux C 命名规范
命名规范的重要性
在 Linux C 开发中,命名规范是代码可读性、可维护性和团队协作的基础,良好的命名规范能够减少歧义,降低理解成本,便于代码审查和长期维护,Linux 社区通过长期实践形成了一套约定俗成的命名规则,这些规则不仅体现在内核代码中,也被广泛应用于开源项目和商业开发中,遵循统一的命名规范,可以让代码更符合 Linux 生态的期望,提升项目的专业性和兼容性。

变量命名规则
变量是程序的基本组成单元,其命名应清晰表达用途和类型。
- 普通变量:采用小写字母,单词间用下划线分隔。
user_count、max_buffer_size,避免使用缩写,除非是广泛认可的(如idx表示索引,tmp表示临时变量)。 - 全局变量:需明确标识其作用域,通常以
g_前缀或模块名后缀区分。g_global_config、system_status。 - 指针变量:建议以
p或ptr为前缀,p_user、ptr_buffer,或直接通过命名体现指针关系,如next_node(指向下一个节点的指针)。 - 结构体成员:使用小写加下划线,与变量命名一致,但可通过结构体名前缀避免冲突。
struct user的成员可命名为user->id、user->name。
示例:
int user_count = 0; // 普通变量
static int g_init_flag = 0; // 全局静态变量
char *p_input = NULL; // 指针变量
struct user {
int id;
char name[32];
};
函数命名规则
函数命名应体现其功能和行为,遵循“动词+名词”或“名词+动词”的组合方式。
- 普通函数:小写字母,单词间用下划线分隔。
get_user_info()、write_data_to_file()。 - 静态函数:以模块名或文件名作为前缀,避免全局命名冲突。
config_parse()(在 config.c 中)、utils_sort_array()(在 utils.c 中)。 - 回调函数:以
cb_或callback_为前缀,cb_event_handler()。 - 函数参数:与变量命名一致,避免使用
a、b等无意义缩写,void copy_string(char *dest, const char *src)。
示例:

// 获取用户信息 int get_user_info(int user_id, struct user *info); // 静态函数:初始化配置 static config_init(void); // 回调函数:处理事件 void cb_event_handler(int event_type);
宏与常量命名
宏和常量用于表示固定值或代码片段,需确保其全局唯一性和明确性。
- 宏定义:全大写字母,单词间用下划线分隔。
MAX_BUFFER_SIZE、NULL、UNUSED_PARAM(x) ((void)(x))。 - const 常量:小写加下划线,或以
k_前缀标识。const int k_max_retries = 3;、const char *k_default_path = "/usr/local/bin"。 - 条件编译宏:以模块或功能为前缀,
CONFIG_DEBUG、ENABLE_FEATURE_A。
示例:
#define MAX_BUFFER_SIZE 1024 #define UNUSED_PARAM(x) ((void)(x)) const int k_max_retries = 3;
结构体、联合体与枚举命名
复杂类型命名需体现其数据组织方式,避免与普通变量混淆。
- 结构体:采用大写字母开头,单词间用下划线分隔,
struct User、struct ConfigData,定义时建议使用typedef简化类型名,typedef struct User User;。 - 联合体:以
union为前缀,命名规则与结构体一致,union DataValue。 - 枚举:以
enum为前缀,成员全大写加下划线,enum Status { STATUS_OK, STATUS_ERROR };。
示例:

typedef struct User {
int id;
char name[32];
} User;
enum Status {
STATUS_OK = 0,
STATUS_ERROR = -1,
STATUS_BUSY = 1
};
文件与目录命名
文件和目录的命名直接影响项目的组织结构,需遵循 Linux 文件系统约定。
- 源文件:小写字母,单词间用下划线分隔,
user.c、config_parser.c。 - 头文件:与源文件对应,
user.h、config_parser.h。 - 目录结构:按功能模块划分,
src/(源代码)、include/(头文件)、tests/(测试文件)。
示例:
project/
├── src/
│ ├── user.c
│ ├── config.c
│ └── utils.c
├── include/
│ ├── user.h
│ ├── config.h
│ └── utils.h
└── tests/
├── test_user.c
└── test_config.c
命名规范的最佳实践
- 一致性:同一项目中需统一命名风格,避免混用不同规范。
- 可读性优先:避免过度缩写,
internationalization应写为internationalization而非i18n(除非社区通用)。 - 避免保留字:不使用 C 语言关键字(如
int、static)作为标识符。 - 注释辅助:对于复杂命名,可通过注释说明其用途,
/* tmp buffer for socket read */ char tmp_buf[256];。
常见命名问题与规避
- 驼峰命名 vs 下划线:Linux 社区更倾向于下划线(如
get_user_info),而非驼峰(getUserInfo)。 - 全局污染:避免使用简短的通用名称(如
temp),可通过模块前缀(如user_temp)区分。 - 大小写敏感:Linux 文件系统通常区分大小写,需确保命名大小写一致,避免
User和user混用。
Linux C 命名规范的核心在于“清晰、一致、可维护”,通过遵循变量、函数、宏、复杂类型及文件的命名规则,开发者可以写出更符合 Linux 生态标准的代码,规范的命名不仅能提升代码质量,还能降低团队协作成本,为项目的长期发展奠定基础,在实际开发中,建议结合项目特点制定详细的命名规范文档,并严格执行,以实现代码风格的统一。




















