个人版程序代码编写规范

2023-10-11 03:20

本文主要是介绍个人版程序代码编写规范,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述
今天分享一篇程序编码规范,希望对各位同行有帮助。

一、命名规范

  • 标识符的名字应当直观且可以拼读,可望文生义,不必进行“解码”。最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文单词一般不要太复杂,用词应当准确。

  • 标识符的长度应当符合“min-length&max-information”原则。如果标识符采用的英文单词太长,几个单词组合后会更长,此时应该采用一些通用而合理的缩写或者应用领域专业术语的缩写。
    例如:Program :<----> Pro Channel<---->CH Transponder<---->TP

  • 程序中不要出现仅靠大小写来区分的相似标识符。

  • 不要使程序中出现局部变量和全局变量同名的现象,尽管由于两者的作用域不同而不会发生语法错误,但会使人误解。

  • 变量的名字应当使用“名词”或者“形容词+名词”的格式来命名。 例如:int ivalue; int ioldValue; int newValue;

  • 全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。

  • 用正确的反义词组命名具有相反意义的变量或相反动作的函数等。 例如:void SetValue(int iValue)
    int GetValue(void)

  • 尽量避免名字中出现数字编号,如Value1、Value2等,除非逻辑上的确需要如此。

  • 类型名和函数名均以大写字母开头的单词组合而成。

  • 变量名和参数名采用第一个单词首字母小写而后面的单词首字母大写的单词组合。

  • 符号常量和宏名用全大写的单词组合而成,并在单词之间用单下划线分隔,注意首尾最好不要使用下划线。

二、语句编写规范

  • 函数变量都应该初始化。
  • 虽然C语言支持默认类型为int,但都不要使用默认数据类型。一定要明确指出函数每一个形参的类型和返回值类型。
  • 在使用运算符&&的表达式中,要尽量把最有可能为false的子表达式放在&&的左边;同样在使用运算符||的表达式中,要尽量把最有可能为TRUE的子表达式放在||的左边。因为C语言对逻辑表达式的判断采取“突然死亡法”(猝死法):如果&&左边的子表达式计算结果为FALSE,则整个表达式就为FALSE,后面的子表达式没有必要再计算,如果||左边的子表达式计算结果为TRUE,则整个表达式就为TRUE,因此后面的子表达式没有必要再计算,这就可以提高程序的执行效率。
  • 不要编写太复杂的复合表达式,应该拆分为多个独立的语句。
  • 在if/else结构中,要尽量把为TRUE的概率较高的条件判断置于前面,这样可以提高该段程序的性能。
  • switch没有自动跳出的功能,每个case子句的结尾不要忘了加上break,不要忘记最后那个default子句。即使程序真的不需要default处理,也应该保留语句default:break;这样做并非多此一举,而是为了防止别人误以为你忘了default处理,以及出于清晰性和对称性的考虑。
  • 对于for循环语句,如果计数器从0开始计数,则建议for语句的循环控制变量的取值采用“前闭后开区间”写法,要防止出现“差1”错误。
    例如:for(x = 0; x < N; x++)

{

}

不要写成

for(x = 0; x < = N - 1; x++)

{

}

  • 在多重嵌套的循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,这样可以减少CPU跨切循环层的次数,从而优化程序的性能。
  • 如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。
  • 尽量使用含义直观的符号常量来表示那些将在程序中多次出现的数字或字符串。例如给界面中用到的一些位置常量等。
  • 需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中。如果某一常量与其他常量密切相关,应在定义中包含这种关系,而不应给出一个孤立的值。例如:
    const float RADIUS = 100;
    const float DIAMETER = RADIUS*2

三、函数编写规范

  • 在你需要某种功能的函数时,首先查看现有的库中是否提供了类似的函数。不要编写函数库中已有的函数,不仅因为这种是重复劳动,而且自制的函数在各个质量属性方面一般都不如对应的库函数。库函数是经过严格测试和实践检验的。
  • 应当在函数原型中写出形参名称,虽然编译器会忽略它。这样做的目的是使函数具有“自说明”和“自编档”能力。不要在函数体内定义与形参同名的局部变量,否则会遮蔽形参。
  • 如果函数没有参数,那么使用void而不要空着,这是因为标准C把空的参数列表解释为可以接受任何类型和个数的参数。
  • 参数命名要恰当,输入参数和输出参数的顺序要合理。
    例如:void StringCopy(char *str1, char *str2);
    应改为
    void StringCopy(char *strDestination, char *strSource);
  • 如果参数是指针,且仅做输入用,则应在类型前加const,以防止该指针指向的内存单元在函数体内被无意中修改。
  • 应避免函数有太多的参数,参数个数尽量控制在5个以内。如果参数太多,在使用时容易将参数糊弄和顺序搞错。
  • 尽量不要使用类型和数目不确定的参数列表。这种风格的函数在编译时丧失了严格的静态类型安全检查。
  • 不要省略返回值的类型。如果函数没有返回值,应声明为VOID类型。
  • 函数名字与返回值类型在语义上不可冲突。
    例如:int getchar(void); 应改为 char getchar(void);
  • 在函数体的“入口处”,对参数的有效性进行检查。
  • 在函数体的“出口处”,对return语句的正确性和效率进行检查。
  • 函数的功能要单一,即一个函数只完成一件事情,不要设计多用途的函数,函数体的规模要小,尽量控制在50行代码之内。
  • 不仅要检查输入参数的有效性,还要检查通过其他途径进入函数体内的变量的有效性,例如全局变量、文件句柄等。
  • 用于出错处理的返回值一定要清楚,让使用者不容易忽视或误解错误情况。
  • 尽量避免函数带有“记忆”功能。相同的输入应当产生相同的输出。带有“记忆”功能的函数,其行为可能是不可预测的,因为它的行为可能取决于某种“记忆状态”。这样的函数既不易理解又不利于测试和维护。函数的static局部变量是函数的“记忆”存储器。建议尽量少用static局部变量,除非必需。
  • 如果输入参数采用“指针传递”,那么加const修饰可以防止意外地改动该指针指向的内存单元,起到保护的作用。

四、指针 数组和字符串编写规范

  • 不管指针变量是全局的还是局部的、静态的还是非静态的,应当在声明它的同时初始化它,要么赋予NULL.
  • 当把“&”用于指针时,就是在提取变量的地址。不能在一个指针前面连续使用多个“&”。

五、高级数据类型

  • 在设计位域的时候,最好不要让一个位域成员跨越一个不完整的字节来存放,因为这样会增加计算机运算的开销。

这篇关于个人版程序代码编写规范的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/185148

相关文章

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

使用Java编写一个文件批量重命名工具

《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景处理1. 文件夹检查与遍历2. 批量重命名3. 输出配置代码片段完整代码背景在开发移动应用时,UI设计通常会提供不

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

JavaEE7 Servlet 3.1(JSR 340)规范中文版

http://www.iteye.com/news/27727-jinnianshilongnian     Jave EE 7中的部分规范已正式获得批准通过,其中包括JSR340 Java Servlet 3.1规范,去年翻译了该规范,在此分享出来,希望对某些朋友有所帮助,不足之处请指正。   点击直接下载    在线版目录   Servlet3.1规范翻译

Wondows dos下怎么编写bat批处理文件

最近搞php,在运行时,以Nginx+php-cgi.exe方式运行Wordpress项目 打开dos,先cd到php-cgi.exe文件当前目录下执行启动命令:php-cgi.exe -b 127.0.0.1:9001再打开一个dos,再cd到nginx.exe文件当前目录下执行启动命令:start nginx 大概过程要经过这些步骤,觉得很麻烦,就学下怎么编写一个bat文件,以双击运行代替

用Python编写倒计时程序:详细教程

目录 引言 环境准备 基本概念 代码实现 步骤一:导入必要的库 步骤二:获取用户输入 步骤三:实现倒计时逻辑 步骤四:整合代码 运行程序 高级功能 扩展功能示例:支持分钟和小时输入 扩展功能示例:图形用户界面 (GUI) 总结 引言 倒计时程序是一个非常常见的小工具,广泛用于各种应用场景中,例如考试时间提醒、烹饪计时器、会议倒计时等。Python 作为一种

三维布尔运算对不规范几何数据的兼容处理

1.前言 上一篇文章谈过八叉树布尔运算,对于规范几何数据的情况是没有问题的。 在实际情况中,由于几何数据来源不一,处理和生成方式不一,我们无法保证进行布尔运算的几何数据都是规范的,对于不规范情况有时候也有需求,这就需要兼容不规范数据情况,当然这种兼容不是一味的让步,而是对于存在有限的不规范数据的兼容处理。 2.原始数据示例 下图是一个大坝模型和之上要对其进行布尔运算的立方体。 大坝模型由