C/C++命名规范-C语言基础

2023-11-04

在这里插入图片描述这一篇文章想要介绍的是编写代码的时候业界比较常用的一些命名规范,以及个人平时的一些命名规范。涉及“驼峰命名法”、“下划线命名法”、“帕斯卡命名法”、“匈牙利命名法”的介绍和见解。属于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;

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


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


零BUG是原则性问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 机器学习集成模型学习——Bagging集成学习(三)

    Bagging bagging的集成方式是 用1个模型 元模型 然后将这个元模型分成多个相同模型 每个模型使用训练集的一部分进行训练 得到多个基模型 最后测试时分别跑每个模型 平均结果得出这个集成模型的最终预测结果 案例代码 from sk
  • VSCode将QT(shadow build)编译输出到指定文件

    VSCode将QT shadow build 编译输出到指定文件 一 啥是shadow build 实际上就是将编译输出的文件跟源码文件放在不同地方 也就是out of source 0 00 在qtcreator中设置就很方便很方便 直接
  • C#将字符串格式化为Json

    private string ConvertStringToJson string str 格式化json字符串 JsonSerializer serializer new JsonSerializer TextReader tr new
  • 如何判断Javascript对象是否存在

    Javascript语言的设计不够严谨 很多地方一不小心就会出错 举例来说 请考虑以下情况 现在 我们要判断一个全局对象myObj是否存在 如果不存在 就对它进行声明 用自然语言描述的算法如下 if myObj不存在 声明myObj 你可能
  • 机器学习总结之第二章模型评估与选择

    2 1经验误差与过拟合 错误率 a个样本分类错误 m个样本 精度 1 错误率 误差 学习器实际预测输出与样本的真是输出之间的差异 训练误差 即经验误差 学习器在训练集上的误差 泛化误差 学习器在新样本上的误差 过拟合 学习器把训练样本学的
  • PHP自增、自减运算流程解析

    PHP自增运算解析 0x01 PHP自增运算 代码如下 0x02 PHP自减运算 代码如下 0x01 PHP自增运算 代码如下
  • Java判断一个时间是否在时间区间内

    package com liying tiger test import java text ParseException import java text SimpleDateFormat import java util Calenda
  • 图像处理——滤波器的比较

    滤波器 方框滤波 boxFilter 均值滤波 blur 高斯滤波 GaussianBlur 中值滤波 medianBlur 线性滤波器 线性滤波器经常用于剔除输入信号中不想要的频率或者从许多频率中选择一个想要的频率 常见的有 低通 高通
  • linux命令 chmod 755的含义 及drwxr-xr-x 的含义

    linux drwxr xr x 第一位表示文件类型 d是目录文件 l是链接文件 是普通文件 p是管道 第2 4位表示这个文件的属主拥有的权限 r是读 w是写 x是执行 第5 7位表示和这个文件属主所在同一个组的用户所具有的权限 第8 10
  • docker 安装node

    docker 安装node 1 使用docker安装node 使用docker安装 docker pull node 拉取镜像 docker run id name c node node 创建容器 可以看到已经装好了 启动node doc
  • Linux系统编程-C++ I/O库

    文章目录 一 总述 二 输出缓冲 三 文件输入输出 四 string流 五 输入输出格式 总述 1 控制布尔值的格式 2 指定整型值的进制 3 在输出中指出进制 4 控制浮点数格式 4 1 指定打印精度 5 输出空白 六 未格式化的输入输出
  • java 数组中存储26个英文字母_利用数组打印26个英文字母

    可以考虑下面两种程序 1 public class Letter public static void main String args for char c a c lt z c System out print c 2 class AB

随机推荐

  • 如何实现一个定时器?看这一篇就够了

    本文主要介绍定时器作用 实现定时器数据结构选取 并详细介绍了跳表 红黑树 时间轮实现定时器的思路和方法 定时器作用 定时器在各种场景都需要用到 比如游戏的Buff实现 Redis中的过期任务 Linux中的定时任务等等 顾名思义 定时器的主
  • Qt常用部件介绍

    这里先给大家介绍 Designer 界面设计器 中例举的常用部件 以便对 Qt 的部件有一定认识 其具体用法后面再作介绍 布局管理组 Layouts 空间间隔组 弹簧 Spacers 按钮组 buttons 项目视图组 Item Views
  • 设计模式深入浅出--21.命令模式简单实例及其在JDK中的应用

    命令模式 定义 将 请求 封装成对象 以便使用不同的请求 命令模式解决了应用程序中对象的职责以及它们之间的通信方式 类型 行为型 适用场景 请求调用者和请求接收者需要解耦 使得调用者和接收者不直接交互 需要抽象出等待执行的行为 优点 降低解
  • 数据表格(QTableWidget)

    一 简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件 QTableWidget单元格数据是QTableWidgetItem对象来实现的 整个表格都需要用逐个单元格对象QTableWidgetItem构建起来 二 详解
  • Presto 与 Hive 语法学习

    Presto 与 Hive 语法学习 文章目录 Presto 与 Hive 语法学习 1 Presto语法 1 1 数据类型 布尔值 整数 浮点 固定精度 字符串 日期和时间 结构 网络地址 UUID HyperLogLog KHyperL
  • muduo1——编程风格:面向对象的编程和基于对象的编程(上)

    muduo库其实不是面向对象的编程 而是基于对象的编程 那么在进入正式的muduo源码分析之前 先来看看这两种编程风格 一 面向对象编程风格 通过对一个线程类的封装来进行讲解 Thread是一个抽象类不能实例化对象 TestThread是派
  • Hp DL380服务器瘫痪如何恢复服务器数据(多图)

    服务器数据恢复故障简介 需要进行数据恢复的是一台HP DL380服务器 三块300GSAS硬盘组成raid阵列 磁盘故障导致整个RAID组瘫痪 其中一块硬盘状态灯为红色 数据库存储在D分区 备份存储在E分区 存储故障 造成D分区不可识别 E
  • Python 关键字global全局变量详解

    变量作用域 一般在函数体外定义的变量成为全局变量 在函数内部定义的变量称为局部变量 全局变量所有作用域都可用 局部变量只能在本函数可用 变量的使用顺序是 局部变量 gt 全局变量 也就是说 优先使用局部变量 那么问题来了 如果想在函数内使用
  • LabVIEW心率监测装置

    LabVIEW大作业 LabVIEW心率采集装置 本设计为我的LabVIEW课程大作业 利用proteus实验仿真软件设计一个了基于stc12c5a单片机的心率采集系统 并在PC机上的Windows环境下利用LabVIEW软件实现心率数据的
  • 开开心心带你学习MySQL数据库之节尾篇下

    真的勇士 那就是看清生活的真相之后 依然热爱生活 罗曼 罗兰 JDBC编程的基本工作 准备工作 1 下载 mysql驱动包 maven 中央仓库 2 导入到项目中复制到项目目录下 标志为 library 编写代码 1 创建数据源 描述数据库
  • (.htaccess文件和.user.ini文件)[SUCTF 2019]CheckIn1

    打开靶机 提交一个一句话木马文件 图片马 显示上传成功 但是使用蚁剑连接返回为空 再使用 htaccess文件绕过 参考博主原文链接 https blog csdn net m0 64444909 article details 12489
  • 设置ImageButton的点击效果

    我要设置一个ImageButton的点击效果 普通状态背景透明 按下状态有一个背景图 src是一个图片 如下所示
  • 解决.net中使用gmail.com邮箱进行Smtp发送信件时失败的问题

    我经常使用免费的gmail com邮箱 因为它容量较大 但我们在使用 net编程实现邮件发送时 常会出现我们意想不到的错误 最常见的就是 1 The operation has timed out 2 出现类似提示 The SMTP ser
  • QT编写的数字键盘

    https download csdn net download qq 20189555 88001237
  • MySQL数据同步到 Redis 缓存的几种方法

    本文主要介绍了浅谈MySQL数据同步到 Redis 缓存的几种方法 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着微点阅读小编来一起学习学习吧 1 Mysql查完数据 再同步写入到Redis
  • 网络安全这玩意儿真不建议一般人学...

    前言 作为一名5年网安工程师老菜鸟来说 我实在想不通 开发岗位那么多 为什么要来学网安 在这里怕是要给准备入坑的同学泼盆冷水了 网络安全这东西真不建议一般人学 基础确实很简单 是个人稍微认点真都能懂 这就是好多人说的网络安全简单 易懂 好学
  • iostat命令详解&指标分析

    Iostat iostat命令用于监视系统CPU和I O设备负载 常用方法 iostat x 1 12 检测系统的io状态 每一秒刷新一次 一共刷新12次 x该选项显示和io相关的扩展数据 还可以使用 k或者 m选项以按照kb或MB显示单位
  • FastDFS单机版环境搭建

    1 搭建环境 ubuntu 2 gcc g 编译器 ubuntu平台在线安装指令 1 apt get install gcc 2 apt get install g 3 apt get install build essential 4 a
  • 1.阅读《疯狂Java讲义》

    从2000年至今 Java语言一直是应用最广的开发语言 并拥有最广泛的开发人群 如今 java已经不再简单地是一门语言 它更像一个完整的体系 一个系统的开发平台 更甚至 它被延伸成一种开源精神 如何学习java 程序的作用是 解决问题 如果
  • C/C++命名规范-C语言基础

    这一篇文章想要介绍的是编写代码的时候业界比较常用的一些命名规范 以及个人平时的一些命名规范 涉及 驼峰命名法 下划线命名法 帕斯卡命名法 匈牙利命名法 的介绍和见解 属于C语言基础篇 持续更新 刚刚开始学习编程的时候 我的第一个老师便强调过