0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

代码编程规范之命名规范

汽车电子技术 来源:大橙子疯嵌入式 作者: 大橙子疯 2023-02-15 14:57 次阅读

前言

这篇重点介绍一下代码编程的命名规范,主要是业界流行的命名法则和标识符命名规范

标识符的命名规则历来是一个敏感话题,典型的命名风格如unix风格、windows风格等,从来无法达成共识。实际上,各种风格都有其优势也有其劣势,而且往往和个人的审美观有关。对标识符定义主要是为了让团队的代码看起来尽可能统一,有利于代码的后续阅读和修改。

命名完全体现了程序的可阅读性和可理解性,在一定程度上是不需要写注释也能看懂代码。

命名法则介绍

目前,业界共有四种命名法则:驼峰命名法、匈牙利命名法、帕斯卡命名法和下划线命名法,其中前三种是较为流行的命名法。

1printEmployeePaychecks// 驼峰命名法                                 
2
3print_employee_paychecks//下划线命名法
4
5PrintEmployeePaychecks// 帕斯卡命名法

其中,驼峰命名法和帕斯卡命名法类似,但是区别在第一个字母是否大小写,因此驼峰命名法一般称小驼峰命名法,帕斯卡命名法称大驼峰命名法。


驼峰命名法

正如它的名称所表示的那样,是指混合使用大小写字母来构成变量和函数的名字(这样的变量名看上去就像骆驼峰一样此起彼伏,故得名),又叫小驼峰命名法。

当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母。

1printEmployeePaychecks

匈牙利命名法

通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域、类型等。这些符号可以多个同时使用,顺序是先m_(成员变量)、再指针、再简单数据类型、再其它。这样做的好处在于能增加程序的可读性,便于对程序的理解和维护

匈牙利命名法的规则是:作用域(属性)+类型+描述。

如:定义一个全局变量,指向类型为int的最小值指针,变量命名为

int g_pMinValue = NULL;

以下是我根据匈牙利命名法总结的的写法对应表

分类 前缀 描述
作用域(属性) 局部变量
m_ 类成员变量(C++
ms_ 类的静态成员变量(C++)
s_ 静态变量
g_ 全局变量
sg_ 静态全局变量
c 常量
类型 b bool 变量,不过我一般是用 is,如定义一个数据接收完成标志,则 bool isRecvEnd;
sz 以 '\\0' 结束的字符串
str string 类型字符串(C++)
p 指针变量
uc 无符号单字节整数型(unsigned char)
us 无符号双字节整数型(unsigned short)
ui 无符号四字节整数型(unsigned int)
c 有符号单字节整数型(signed char)
s 有符号双字节整数型(signed short)
i 有符号四字节整数型(signed int)
arr 数组
l 长整型
f 浮点型变量
pfn 函数指针
t 结构体变量
e 枚举变量
类型前缀可以组合使用,例如"arrc"表示字符数组,"psz"表示指向以'\\0'结束的字符串的指针等等

有看过我代码的朋友可能就会有疑问了,为什么我写的代码中关于变量的定义,特别是整数型的变量没有加前缀uc us ui c s i l ,而其它类型变量都会加上前缀,原因如下:

  1. 虽然这个一看名字就知道这个变量的类型定义和取值范围,但是通常情况下变量定义后在后面的维护中可能为了增大或减少取值范围,会改变类型的定义,但又不同时重命名变量,导致后来再看就会有异议
  2. 目前的大部分编程软件将鼠标放置在变量上,通常就会提示该变量的类型定义,所以也不需要特意按照这个命名
  3. 大部分只有整数型的变量定义后才会因为取值范围受限而改变类型定义,而其他类型的定义之后基本不会随意变动

帕斯卡命名法

是指混合使用大小写字母来构成变量和函数的名字,每个单词的第一个字母都大写,又叫大驼峰式命名法;

1PrintEmployeePaychecks

下划线命名法

使用下划线( )连接组成的标识符,即 单词(字母或数字) 单词(字母或数字)_单词(字母或数字)

1print_employee_paychecks(); // 函数
2int min_value = 0;   // 变量

标识符命名规范

根据不同场景使用不同命名规则,甚至组合使用,业内比较常用的方式。

文件名

驼峰命名法,有时也使用下划线命名法,根据不同情况使用,尽量和之前的保持一致

因为不同系统对文件名大小写处理会有所不同(如Windows系统不区分大小写,但是Linux系统则区分)


变量名

匈牙利命名法 + (小)驼峰命名法两种结合使用

具体规则是:属性+类型+描述( 驼峰命名法)

  1. 使用名词或者形容词 + 名词方式命名变量(描述),如char szFile[20] = "file";int fileSize = 0;
  2. 禁止使用单字节命名变量,但允许定义 ijk 等作为局部循环变量

宏定义/枚举

大写 + 下划线命名法

  1. 对于数值或者字符串等等常量或者枚举的定义,全部采用全大写字母,单词之间加下划线“_”的方式命名。如 #define MIN_VALUE 5
  2. 除了头文件或编译开关等特殊标识符定义,宏定义不能使用下划线“_”开头和结尾(一般来说,下划线开头或结尾的宏都是一些内部的定义)

函数名

帕斯卡命名法(大驼峰命名法),对于对外提供的接口函数,则加模块前缀

  1. 以函数要执行的动作命名,一般采用动词或者动词+名词的结构,且符合帕斯卡命名法
  2. 对于对外提供的接口函数,一般加上模块前缀LED_,如LED_CtrlOff(…)

通用规则

除了上述规则外,关于以上标识符的命名还应该符合以下规则:

1、标识符的命名要清晰、明了,有明确的含义,同时使用完整的单词或大家基本可以认同和理解的缩写,避免让人产生误解

如:良好的命名:int error_number; 不好的命名:int n, nerr;

2、标识符的长度应当符合“min-length && max-information”原则

如:几十年前老ANSI C规定名字不准超过6个字符,现今的C++/C不再有此限制。一般来说,长名字能更好地表达含义,所以函数名、变量名、类名长达十几个字符不足为怪。那么名字是否越长越好?不一定,例如变量名maxval就比maxValueUntilOverflow好用

3、除了常见的通用缩写外,不使用单词缩写,不得使用汉语拼音

较短的单词可以通过去掉“元音”形成缩写,较长的单词可取单词的头几个字母形成缩写,一些单词有大家公认的缩写,常用单词缩写必须统一。协议中的单词缩写与协议保持一致,对于某个系统使用的专用缩写应该在注释或者某处做统一说明

4、用正确的反义词组命名具有互斥意义的变量或相反动作的函数等

如:add/removebegin/endcreat/destroy

5、尽量避免名字中出现数字编号,除非逻辑上的确需要编号

6、重构/修改部分代码时,应保持和原有代码风格保持一致

根据源代码现有的风格继续编写代码,有利于保持总体一致

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WINDOWS
    +关注

    关注

    3

    文章

    3540

    浏览量

    88598
  • UNIX
    +关注

    关注

    0

    文章

    296

    浏览量

    41462
  • 标识符
    +关注

    关注

    0

    文章

    12

    浏览量

    7339
收藏 人收藏

    评论

    相关推荐

    焊盘命名规范

    焊盘命名规范 通常我们的焊盘分为通过孔(THP)焊盘和表贴(SMD)焊盘两种形式。但这两种形式当中,又有多种形状。所以我们要有一个统一的命名规范,以方便以后调用。一、THP焊盘
    发表于 12-31 17:27

    关于Android命名规范

    第一家公司是如此的重要,如果开发流程规范,对你之后的影响不是一般的大!而我经历的公司大都不成体系,我的习惯就是我的规范!哈哈!很多的技术人员,恐怕都认为除了自己的作品外,别人写的代码都是“垃圾
    发表于 10-15 00:11

    关于Android命名规范

    第一家公司是如此的重要,如果开发流程规范,对你之后的影响不是一般的大!而我经历的公司大都不成体系,我的习惯就是我的规范!哈哈!很多的技术人员,恐怕都认为除了自己的作品外,别人写的代码都是“垃圾
    发表于 06-21 09:35

    FPGA的代码书写规范

    代码书写规范本文节选自特权同学的图书《FPGA设计实战演练(逻辑篇)》配套例程下载链接:http://pan.baidu.com/s/1pJ5bCtt 虽然没有“国际标准”级别的Verilog或
    发表于 04-16 04:08

    C语言编程的基本规范有哪些?

    为了提高源程序的质量和可维护性,从而最终提高软件产品生产力,特编写此规范。本标准规定了程序设计人员进行程序设计时必须遵循的规范。本规范主要针对单片机编程语言和08编译器而言,包括排版、
    发表于 02-24 07:22

    单片机程序设计编程规范分享

    严格,品质要求高的软件公司对员工编写代码的风格都有硬性规定,例如缩排的使用,TAB 的长度,函数变量的命名方式. 这些规定的明显好处是可以统一规范不同程序员所编制的代码,提升程序
    发表于 09-25 08:06

    C#编程代码规范

    C#编程代码规范 注:目的:为了保证开发队伍中的所有程序员都能够理解其他人编写的代码。 参考: 《华为编码规范和范
    发表于 02-09 16:11 81次下载

    PCB封装命名规范

    介绍PCB封装的命名规范,让封装库有规律,易查询。
    发表于 10-29 14:07 0次下载

    嵌入式代码编写规范

    嵌入式代码编码规范,用于规范自己的代码,增强可读性,非标准规范。最好能强制自己形成良好的编码风格,有利于开发
    的头像 发表于 04-26 15:21 5268次阅读

    关于软件、硬件版本号命名的常见规范

    不知道大家写程序、画板子时,版本号是怎么命名的?   最常见的就是V1.0.0这种简单的形式命名,复杂一点就是带有日期、后缀等版本信息。   当然,版本号命名规范就像
    的头像 发表于 12-31 10:04 4766次阅读

    史上最全的PCB封装命名规范

    适用于主流EDA工具的封装命名规范规范命名可以提高审核效率,较少工程师犯错。
    发表于 10-21 16:06 0次下载

    科普一下Verilog代码命名规范

    命名规范包括模块命名规范代码命名规范
    的头像 发表于 11-17 09:54 3841次阅读

    代码编程规范注释风格

    注释的原则是有助于对程序的阅读理解以及提供二次开发所需文档,注释的方式有很多,但是业内常用的规范是 Doxygen 代码注释规范。遵循原则为,说明性文件、函数接口必须充分注释说明。全局变量需要说明功能及取值范围,需要自行处理资料
    的头像 发表于 02-15 15:01 1843次阅读
    <b class='flag-5'>代码</b><b class='flag-5'>编程</b><b class='flag-5'>规范</b><b class='flag-5'>之</b>注释风格

    代码命名规范是真优雅呀!代码如诗

    Java项目的代码结构,能够体现它的设计理念。Java采用长命名的方式来规范类的命名,能够自己表达它的主要意图。配合高级的IDE,可以减少编码人员的记忆负担,靠模糊的匹配就能找到自己所
    的头像 发表于 03-13 09:32 807次阅读

    FPGA的Verilog代码编写规范

      注:以R起头的是对编写Verilog代码的IP设计者所做的强制性规定,以G起头的条款是建议采用的规范。每个设计者遵守本规范可锻炼命名规范
    的头像 发表于 08-15 16:23 2166次阅读