这一篇文章想要介绍的是编写代码的时候业界比较常用的一些命名规范,以及个人平时的一些命名规范。涉及“驼峰命名法”、“下划线命名法”、“帕斯卡命名法”、“匈牙利命名法”的介绍和见解。属于C语言基础篇(持续更新


刚刚开始学习编程的时候,我的第一个老师便强调过,命名要规范,需要做到见名知意,当时不以为然。不就给变量起个名字吗?26个字母什么时候用完过,再不够加个1234567不就行了吗?a1,a2,a3什么时候用的完?但是嘛,平时做做练习随便命名倒还行,毕竟代码量不多。当你的代码量多起来了,开始模块化编程开始写项目的时候,规范的命名就显得很重要了。

规范的命名可以让你在代码调试的过程中快速的知道当前变量的功能和定义时的目的。而不需要在这个文件看到一个变量,又要赶紧翻到别的文件去看看这个变量定义来是干嘛的。

对于规范命名,有很多编程入门书籍都有讲到。为此阿里还专程编辑整理出了一本书《阿里巴巴Java开发手册》来规范业界的代码习惯。可见代码规范化有多重要了。

好了,说了那么多有的没的,其实意义也不大。因为会看到这个标题而点进来看的人,本身就是那些已经意识到写代码命名需要规范的人了。我们进入正题吧!

这篇文章,仅仅是想要分享一下我自己平时做项目的一些命名习惯,这里面的内容并非什么资深的专业规范,更没有什么权威性。仅仅只是个人借鉴网上的一些命名方法,以及平时使用库函数时对于前人一些命名规范的效仿,再结合自身的编程习惯,给自己制定的一套命名规则。


在分享我自己的命名规范之前,我们先来简单了解一下几个比较出名的命名方法。

常用的命名方法


驼峰命名法:

char myName[10] = {“ShiYi”};

驼峰命名法的特点是:变量名由多个单词组成,其第一个单词的首字母小写,后面每一个单词的首字母都要大写,由于其外形看起来像驼峰一样上下起伏故得名。这也是大家平时编程开发的时候用的比较多的一个命名方法。因为这种命名方法使用起来非常顺手,而且外形也很好看。


帕斯卡命名法:

char MyName[10] = {“ShiYi”};

名字听起来很高大上,实际上就是把驼峰命名法的第一个单词的首字母也改为大写。所以也称之为大驼峰命名法。但由于人们在输入习惯上面,通常在输入第一个单词的时候,不会刻意切换大小写,所以没有驼峰命名法使用起来顺手。


下划线命名法:

char my_name[10] = {“ShiYi”};

名如其意,每个单词之间用下划线隔开。但是由于有下划线的加入会让变量整体看起来过长,不过这种命名方法却有通俗易懂的效果,由于每两个单词之间用一小块空白隔开,所以即便是一个完全没有命名规范认知的新手,也能一眼就看出这个变量想要表达的东西。


匈牙利命名法:

char cMyName[10] = {“ShiYi”};

这个命名法就有点意思了,好像是一个匈牙利的程序员在很久以前发明的。其特点是用名字的前一到两个字母来表示变量的类型,后面表示变量意思的单词首字母大写。

这个命名方法也是业界被批判最多的一个命名方法了,具体原因说起来有点长,主要还是由于数据类型的不断增加以及如今IDE功能的不断完善导致的,前者导致了这种命名方法的缺点不断放大,后者导致这种命名方法的优点不断缩小。而且由于C++中模版关键字“template”的引入,使得变量类型的不确定性大大增加,更加放大了这种命名方法的缺点。对于这个命名方法,我不做太多评价,我觉得嘛,出发点是挺好的,只是实在有一些致命的缺点还没法解决。


好了,目前业界比较常见的几个命名规范都已经有所了解了。

下面就是我自己命名规范了,这是我很久以前刚刚开始学习编程的时候,弄完第一个项目之后,制定给自己的,后面的学习过程中也不断的完善更新着。对于C语言的开发,这套规范完全够用了。但是后面接触到了C++和Qt之后,类型和特性什么的多了之后,渐渐的也开始有点力不从心了。

不过这个问题也不是一时半会能真正解决的,对于命名规范的书籍有很多,但是业界到目前为止也没有一套真正公认合适好用的大家普遍遵循的命名规范。这也一直是一个问题,几乎都处于家有家规国有国法的现状,不同的公司不同的团队不同企业有其自己制定的命名规范,只要开发团队之间协调好即可。

所以我这套命名规范目前来说只适用于个人,适用范围也比较窄,仅仅涉及常用的类型,对于一些不太常用的类型很少涉及,其实我也不太愿意涉及太多的内容,一个体系如果过于庞大便会变得过于笨重,难以变通不够灵活。我宁愿它简洁一点,高效一点,也实用一点。虽然以后有什么更好的想法可能还是会更新的,不过现在就只到这里了。。。


以下是我的命名规范:


总体规范:

  • 所有命名中第一个字母都用以说明属性
  • 带下画线的都是类型
  • 不带下画线的都是对象(这里的对象也包含变量(下同))
  • 第一个字母大写表示特殊类型的对象
  • 第一个字母小写表示普通类型的对象

常见类型命名规范

  • 函数命名规范:帕斯卡加下画线

    int my_Function(void);

标志是有下画线的同时用驼峰命名

  • 类、结构体、联合体命名规范:以大写字母C或S或L开头接上帕斯卡加下画线

  类:

    class CMy_Class{}

  结构体:

    struct SMy_Struct{};

  链表:

    struct LMy_List{};

    首字母大写C表示类,S表示结构体,L表示链表

标志是两个大写开始


特殊类型命名规范

  • 宏定义和常量和枚举命名规范:全部大写

    #define MYMACRO 0

标志是全部大写

  • typedef重命名对象:还没想好
  • 引用类型:还没想好

常见对象命名规范

  • 普通类型对象命名规范:匈牙利加驼峰(小写类型加驼峰)

    int imyName = 0;

    小写的首字母表示类型,后面接驼峰

标志是两个小写开始


特殊类型对象命名规范:

  • 结构体对象的命名规范:小写s加帕斯卡

    SMy_Struct sMyStruct = NULL;

  • 类的对象命名规范:小写c加帕斯卡

    cMyClass = new CMy_Class;

  • 链表对象的命名规范:小写l加帕斯卡

    LMy_List lMyList = NULL;

标志是一个小写字母开头接大写


总结一下:我用这个规范定义名字,先看有没有下划线,如果有则说明这是个类型或者函数,然后看首字母,小写是函数,大写就是别的,再通过类型来判断。如果名字里面没有下划线,则说明这是个对象,然后看首字母,如果是小写,普通数据类型,如果是大写这是别的,再通过类型来判断。


原博客始发于CSDN,在如今博客界的转载抄袭泛滥的环境下,原创不易,点个赞再走呗。以下是博客首页的链接。


零BUG是原则性问题。

C/C++命名规范-C语言基础的更多相关文章

  1. Java语言基本语法(一)————关键字&标识符(Java语言标识符命名规范&Java语言的包名、类名、接口名、变量名、函数名、常量名命名规则 )

    一.关键字 关键字的定义和特点 定义:被Java语言赋予特殊含义,用做专门用途的字符串(单词). 特点:关键字中所有字母均为小写 下面列举一些常用的关键字. 用于定义数据类型的关键字:byte.sho ...

  2. Go语言基础语法总结

    1. 认识HelloWorld 在前面的<Go的安装和使用>这篇文章中已经写过HelloWorld.go了,现在就来逐行认识一下它. package main import "f ...

  3. c语言基础数据类型及命名规范

    1. 常量是程序运行期间不能被改变的量; 变量代表一个存储区域,存储区域内存储的内容就是变量的值, 变量的值可以在程序运行期间改变  (变量就像一个杯子, 用来存放水, 杯子里的水即变量的值是可以改变 ...

  4. 初识 Javascript.01 -- Javascript基础|输出方式、变量、变量命名规范、数据类型、

    Javascript基础 1 聊聊Javascript 1.1 Javascript的历史来源 94年网景公司   研发出世界上第一款浏览器. 95年 sun公司   java语言诞生 网景公司和su ...

  5. JavaScript 引入方式 语言规范 语言基础 数据类型 常用方法 数组 if_else 比较运算符 for while 函数 函数的全局变量和局部变量 {Javascript学习}

    Javascript学习 JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript ...

  6. OC基础之方法和参数的命名规范

    以前学过C/C++/Java/C#语言的童鞋可能刚开始对于OC的方法和参数的命名规范大为不爽 举例来说,如下一个OC方法: - (void)tableView:(UITableView *)table ...

  7. java基础之Java变量命名规范

    本文介绍的是java中的变量的命名规则,对于初学者来说,还是很重要的.希望对你有帮助,一起来看. Java是一种区分字母的大小写(case-sensitive)的语言,下面谈谈Java语言中包.类.变 ...

  8. C语言常见命名规范

    C语言常见命名规范   1 常见命名规则 比较著名的命名规则首推匈牙利命名法,这种命名方法是由Microsoft程序员查尔斯·西蒙尼(Charles Simonyi) 提出的.其主要思想是“在变量和函 ...

  9. c#基础学习(0625)之vs常用快捷键、基础数据类型、命名规范

    vs常用快捷键 Ctrl+K+D:快速对齐代码 Ctrl+z:撤销 Ctrl+S:保存 Ctrl+J:快速弹出只能提示 Shift+End:从行首快速选中整行 Shift+Home:从行未快速选中整行 ...

  10. Android 开发 命名规范(基础回顾)

    标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写. 2 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字 ...

随机推荐

  1. ObjectARX2016-2创建直线

    众所周知,数据库里面包含各种数据表,而数据表里面又是各种记录,当然还有字段.AUTOCAD里面对于图形的管理也是基于图形数据库的.因此,想要在DWG里面添加一条直线,只需要做三件事: (1)打开数据表 ...

  2. Python下使用argparse模块的脚本参数配置

    python的一个用于命令行参数解析的模块,其专业解释已经有很多了,可以去详查,不做赘述,仅谈谈自己的一些理解. 为什么要用argparse模块来为代码导入参数或者文件路径呢?如果是一个简单的项目,输 ...

  3. wand,week and 算法

    一般搜索的query比较短,但如果query比较长,如是一段文本,需要搜索相似的文本,这时候一般就需要wand算法,该算法在广告系统中有比较成熟的应该,主要是adsense场景,需要搜索一个页面内容的 ...

  4. SAP Process Orchestration (SAP PO): The Comprehensive Guide (2nd Edition) (SAP PRESS)

    SAP Process Orchestration (SAP PO): The Comprehensive Guide (2nd Edition) (SAP PRESS) 有需要的联系 wx :erp ...

  5. No.1.6

    结构伪类选择器 根据元素在HTML中的结构关系查找元素 选择器 说明 E:first-child{} 匹配父元素中的第一个子元素,并且是E元素 E:last-child{} 匹配父元素中的最后一个子元 ...

  6. PostgreSQL Win10 安装、创建表并添加数据(安装细节+常见错误避坑)

    1.下载:postgresql-14.5-1-windows-x64.exe 地址:Download PostgreSQL 2.安装: 下一步即可,注意记住期间设置的超级管理员密码和设置的端口号 安装 ...

  7. VUE基础 · 绑定(1)

    前端三大框架:Angular.js.React.js.Vue.js,目前最热的是Vue,并且使用的热度还在递增中. Vue已经将操作页面的方法封装好,我们只需要对数据进行修改就可以完成页面的显示.Vu ...

  8. redis之缓存穿透、缓存击穿、缓存雪崩

    一.缓存穿透 1 什么是缓存穿透 缓存穿透是指查询一个在redis和DB中都不存在的数据,redis中查不到去DB查,DB查不到则不写入redis,导致每次查询这个数据都要穿过redis穿透到DB 2 ...

  9. js 处理日期加减

    js 处理日期加减 开始时间设置为6点整,若当前时间小于6:00:00,则使用T-1,否则使用T 结束时间设置为T+1的6点整 Date.prototype.format = function(fmt ...

  10. 计算机网络复习小结(3)-IPv4

    IPv4分组 一个IP分组由首部和数据两部分组成,首部前一部分的长度固定,共20B,是所有IP分组必须具有的.在IP数据报首部中有三个关于长度的标记,一个是首部长度,一个是总长度,一个是片偏移,基本单 ...