C/C++语言代码规范
1.标识符名称:
标识符名称包括函数名、常量名、变量名等。这些名字应该能反映它所代表的实际东西,具有一定的意义,使其能 够见名知义,有助于对程序功能的理解。规则如下:
- 所有宏定义、枚举常数和const常变量,用大写字母命名。 #define ARRAY_SIZE 24
- 复合词中每个单词的第一个字母大写。也可以在复合词可以用下划线隔开每个词。SeqList locate_seq
typedef定义的类型名用大写字母表示。
typedef int INTEGER;通常,函数的命名也是以能表达函数的动作意义为原则的,一般是由动词打头,然后跟上表示动作对象的名词,各单词的首学母可以大写。createNulList_seq
循环变量可采用i,j,k等,不受上述规则限制
对结构体内的变量命名,遵循变量的具体含义命名原则
2.数据和函数说明:
- 数据说明次序应当规范化,使数据属性容易查找,也有利于测试、排错和维护。说明的先后次序应固定,应按逻辑功能排序,逻辑功能块内建议采用下列顺序:整型说明、实型说明、字符说明、逻辑量说明。
- 如果设计了一个复杂的数据结构,应当通过注释对其变量的含义、用途进行说明
3.程序注释:
程序注释是程序员与日后的程序读者之间通信的重要手段之一,注释分为文件注释、函数注释和功能注释。正规程序的注释应注意:注释行的数量占到整个源程序的1/3到1/2。
文件注释位于整个源程序的最开始部分,注释后空两行开始程序正文。它包括:
——程序标题。
——目的、功能说明。
——文件作者、最后修改日期等说明。
3.1文件注释:
例:
/**************************************************************
(空一行)
标题:merglist.c
功能:归并两个有序表.
说明:
归并两个数据元素按非递减有序排列的线性表palist和pblist,求得线性表pclist也具有同样的特性
当前版本:X.x
修改信息:2004.08.05 Anni,Initial Version
2004.08.20 Tom,Bug xxxx fixed
**************************来关**********************************/
(空2行,开始程序正文)
3.2函数注释:
函数注释通常置于每函数或过程的开头部分,它应当给出函数或过程的整体说明,对于理解程序本身具有引导作用。一般包括如下条目:
——模块标题。
——有关本模块功能和目的的说明。
——调用格式
——接口说明:包括输入、输出、返回值、异常。
——算法。如果模块中采用了一些复杂的算法。
函数注释示例:
(注释开头与上一函数最后一行间隔两行)
/***************************************************************
标题:delete_seq
功能:在palist所指顺序表中删除下标为p的元素
格式:int delete_seq(PSeqList palist,intp)
输入:palist所指顺序表,下标p
输出:palist所指顺序表
返回值:TRUE正常,FALSE错误
***************************************************************/
(注释后直接开始程序正文,不空行。)
3.3功能性注释
功能性注释嵌在源程序体中,用于描述其后的语句或程序段做什么工作,也就是解释下面要做什么,或是执行了下面的语句会怎么样。而不要解释下面怎么做,因为解释怎么做常常与程序本身是重复的。
例:
/*把 amount 加到total中*/
total=amount +total;
这样的注释仅仅是重复了下面的程序,对于理解它的工作并没有什么作用。而下面的注释,有助于读者理解。
/*将每月的销售额amount加到年销售额total中*/
材total=amount +total;
4.语句结构
为保证语句结构的清晰和程序的可读性,在编写软件程序时应注意以下几个方面的问题:
- 在一行内只写一条语句,并采用空格、空行和移行保证清楚的视觉效果。
- 每一个嵌套的函数块,使用一个TAB缩进(可以设定为4个空格),大括号必须放在条件语句的下一行,单独成一行,便于匹对:
- 文件之中不得存在无规则的空行,比如说连续十个空行。
一般来讲函数与函数之间的空行为2-3行;在函数体内部,在逻辑上独立的两个函数块可适当空行,一般为1-2行。
- 程序编写首先应考虑清晰性,不要刻意追求技巧性而使得程序难以理解。
- 每行长度尽量避免超过屏幕宽度,应不超过80个字符。
- 除非对效率有特殊要求,编写程序要作到清晰第一,效率第二。
- 尽可能使用函数库。
- 尽量用公共过程或子程序去代替重复的功能代码段。
- 使用括号清晰地表达算术表达式和逻辑表达式的运算顺序。如将x=a*b/c*d 写成x=(a*b/c)*d可避免阅读者误解为x=(a*b)/(c*d)。
- 避免采用过于复杂的条件测试。
- 避免过多的循环嵌套和条件嵌套。
- 建议不要使用*=,A=,/=等运算符。
- 一个函数不要超过200行。一个文件应避免超过2000行。
- 尽量避免使用go to语句。
- 不鼓励采用?:操作符,如z=(a>b)?a:b;
- 不要使用空的if else语句。如
if(mychar >= ‘A’)
if(mychar <= ‘Z’)
printf("This is a letter\n");
else
printf(“This is not a letter\n");else到底是否定哪个if容易引起误解。可通过加{}避免误解。
尽量减少使用“否定”条件的条件语句。如:
把 if(!((mychar<'0’)||(mychar>'9)))
改为if((mychar>='0)&&(mychar<='9))
C/C++语言代码规范的更多相关文章
- Go语言代码规范指导
本规范旨在为日常Go项目开发提供一个代码的规范指导,方便团队形成一个统一的代码风格,提高代码的可读性,规范性和统一性.本规范将从命名规范,注释规范,代码风格和 Go 语言提供的常用的工具这几个方面做一 ...
- Golang——详解Go语言代码规范
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Golang专题的第二篇,我们来看看Go的语言规范. 在我们继续今天的内容之前,先来回答一个问题. 有同学在后台问我,为什么说Gola ...
- c语言代码规范
什么叫规范?在C语言中不遵守编译器的规定,编译器在编译时就会报错,这个规定叫作规则.但是有一种规定,它是一种人为的.约定成俗的,即使不按照那种规定也不会出错,这种规定就叫作规范.虽然我们不按照规范也不 ...
- Java 代码规范,你应该知道的一些工具和用法
从事编程这个行业,你一定被别人说过或者说过别人这句话:代码要规范!求职面试时也能从 JD 上看到这个要求:要有良好的编程习惯.其实都是在讲代码规范(Code Style)这件事情. 每个人都有自己的编 ...
- Java 代码规范,你应该知道的一些工具和用法(转)
转自:http://yifeng.studio/2017/06/30/coding-with-code-style/ Java 代码规范,你应该知道的一些工具和用法 2017-06-30 从事编程这个 ...
- 《手把手教你学C语言》学习笔记(4)---代码规范
编程过程中需要遵守编译器的各种约定,例如以下代码: 1 #include <stdio.h> 2 3 int main(int argc, char **argv) 4 { 5 print ...
- 转型IT学什么语言好,学编程语言为何要重视代码规范?
造价转IT需要注意什么,先学什么比较好?属于零基础,2019毕业,三本学校,男.自己的想法是先以副业来学习,在合适的时候转入it行业.1.以副业来学的话应该先学习什么比较好?2.如果要直接找工作的话先 ...
- C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义
类型判断符号: C#:object a; if(a is int) { } 用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...
- C#代码规范
C#代码规范 一.文件命名 1 文件名 文件名统一使用帕斯卡命名法,以C#类名命名,拓展名小写. 示例: GameManager.cs 2 文件注释 每个文件头须包含注释说明,文件头位置指的是文件最 ...
随机推荐
- docker 部署公司阿里云服务器 (一)
持续更新... 背景环境: 阿里云ecs服务器 centos7.4 公网地址:xx.xx.xx.xx 内网地址:172.16.77.4 阿里云RDS 阿里云 Redis 第 ...
- 数据库迁移expdp impdp 与 OGg 搭建
1.long 字段的无法使用OGG 同步 2.clob字段的导入导出Bug , 生产使用network-link 导入导出太慢了,本地导入导出速度会快3到4倍 .但是测试环境的情况却相反 测试环境和生 ...
- c++中赋值运算符重载为什么要用引用做返回值?
class string{ public: string(const char *str=NULL); string(const string& str); //copy构造函数的参数 ...
- Oracle基础篇--00引言
今天开始,复习oracle基础.主要是以前培训的时候的文档作为结构来梳理知识点,主要目的是把Oracle基础打的扎实点.后面要转做后台开发,或者工作中需要用到数据库知识时也不至于临时抱佛脚. 一直以来 ...
- javascript 例外处理Try{}catch(e){}
程序开发中,编程人员经常要面对的是如何编写代码来响应错误事件的发生,即例外处理(exception handlers).如果例外处理代码设计得周全,那么最终呈现给用户的就将是一个友好的界面.否则,就会 ...
- leetcode 175 Combine Two Tables join用法
https://leetcode.com/problemset/database/ ACM退役,刚好要学sql,一定要刷题才行,leetcode吧. 这一题,说了两个表,一个左一个右吧,左边的pers ...
- OpenStack Weekly Rank 2015.07.27
Module Reviews Drafted Blueprints Completed Blueprints Filed Bugs Resolved Bugs Cinder 7 1 1 7 10 Sw ...
- JavaScript Date学习实例:获取3分钟前的时间“hhmmss”格式
上一篇博客分享了Date对象的理论知识,今天正好看到一段相关的代码,可以继续深化,通过实例加强复习Date 题目:获取3分钟前的时间,并且显示格式是hhmmss 以下是看到的代码 var time=n ...
- pat1017. Queueing at Bank (25)
1017. Queueing at Bank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Supp ...
- 如何使用rem单位
最近搞移动端,真是被rem.em与px的换算要了老命了,看了不少文档,似乎弄明白了,这不今天用又蒙圈了. 好多文档上老是说用rem就给html设置font-size,用em就给body设置font-s ...