编程命名风格

本文记录个人编程规范中的命名风格。

一、背景

接触了很多种语言及编程框架,有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 精简