本文记录个人编程规范中的命名风格。
一、背景
接触了很多种语言及编程框架,有c/c++、mfc、QT、NodeJS、C#、Golang、Python、PHP、HTML、ASP,等等,有windows桌面、linux应用层、linux驱动等方面。有擅长的有刚入门的。多种语言混合起来,有些会比较乱。
排除语言特性,列出命名风格,或者说是个人的习惯。使用灵活性优于定义的规则,不能拘泥。
二、C++类
风格
类
大写。以大写C
为前缀。声明的类变量,可用小写的c
为前缀。接口
大写。以大写I
为前缀。声明的类变量,可用小写的i
为前缀。结构体
大写。考虑后缀_t
。类内部函数(方法)
小写+大写。
注:包私有、内部、保护等类型。类公开函数(方法)
大写。
注:含包外可见。类公开变量
大写。(注:如C#/Golang/C++)类私有变量
小写+大写。考虑加前缀m_
。
注:MFC中使用m_
。非类内函数
大写,考虑小写+大写。全局变量
添加前缀g_
,以示区别。局部变量
小写(readbuf buffer)、缩写(tmp cmd len buf)、简洁写法(i j k)。文件名
大写+小定、全小写(Golang规定)。
注:C++的类、Golang的包不做区别,统一理解为“类”。
适用范围
C++应用程序、MFC、QT、JS、C#、Golang。
三、C类
风格
结构体
以名见义,考虑后缀_t'
。函数
小写+下划线。考虑小写+大写。局部变量
小写+下划线(read_buffer)、小写(readbuf buffer)、缩写(tmp cmd len buf)、简洁写法(i j k)。
注:为了与函数区别,有时直接省略下划线。全局变量
添加前缀g_
,以示区别。
注:全局静态,考虑添加s_
。层次
同一层或同一模式者,考虑相同前缀。如产生某命令函数集,可采用genXXXCmd
形式。从俗命名
有些如datetime、filename、filepath、notok等,已习惯,直接用之,不更改。文件名
大写+小定、全小写。
适用范围
linux应用层开发、linux驱动、非OS开发。
命名习惯
- 操作性命名
使用“动宾”结构。如OpenFile(非FileOpen)、ReadFlash(非FlashRead)。 - 判断性命名
IsFileOpened、IsOpened(非IsOpen)。
注:符合英语语言习惯。 - 框架层次
如因系统构架分层原因,使用相同前缀,可改变前述规定。
示例:drv_flash_write/drv_flash_read、drv_gpio_write/drv_gpio_read,等
四、特例
各种框架有自己的特点。如FreeRTOS、STM32自带库,或厂家提供的SDK,原则遵循其格式,如实在适应不了,改为自己的风格。
李迟
2018.12 初稿
2019.11 精简