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++语言代码规范的更多相关文章

  1. Go语言代码规范指导

    本规范旨在为日常Go项目开发提供一个代码的规范指导,方便团队形成一个统一的代码风格,提高代码的可读性,规范性和统一性.本规范将从命名规范,注释规范,代码风格和 Go 语言提供的常用的工具这几个方面做一 ...

  2. Golang——详解Go语言代码规范

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Golang专题的第二篇,我们来看看Go的语言规范. 在我们继续今天的内容之前,先来回答一个问题. 有同学在后台问我,为什么说Gola ...

  3. c语言代码规范

    什么叫规范?在C语言中不遵守编译器的规定,编译器在编译时就会报错,这个规定叫作规则.但是有一种规定,它是一种人为的.约定成俗的,即使不按照那种规定也不会出错,这种规定就叫作规范.虽然我们不按照规范也不 ...

  4. Java 代码规范,你应该知道的一些工具和用法

    从事编程这个行业,你一定被别人说过或者说过别人这句话:代码要规范!求职面试时也能从 JD 上看到这个要求:要有良好的编程习惯.其实都是在讲代码规范(Code Style)这件事情. 每个人都有自己的编 ...

  5. Java 代码规范,你应该知道的一些工具和用法(转)

    转自:http://yifeng.studio/2017/06/30/coding-with-code-style/ Java 代码规范,你应该知道的一些工具和用法 2017-06-30 从事编程这个 ...

  6. 《手把手教你学C语言》学习笔记(4)---代码规范

    编程过程中需要遵守编译器的各种约定,例如以下代码: 1 #include <stdio.h> 2 3 int main(int argc, char **argv) 4 { 5 print ...

  7. 转型IT学什么语言好,学编程语言为何要重视代码规范?

    造价转IT需要注意什么,先学什么比较好?属于零基础,2019毕业,三本学校,男.自己的想法是先以副业来学习,在合适的时候转入it行业.1.以副业来学的话应该先学习什么比较好?2.如果要直接找工作的话先 ...

  8. C#与Java对比学习:类型判断、类与接口继承、代码规范与编码习惯、常量定义

    类型判断符号: C#:object a;  if(a is int) { }  用 is 符号判断 Java:object a; if(a instanceof Integer) { } 用 inst ...

  9. C#代码规范

    C#代码规范  一.文件命名 1 文件名 文件名统一使用帕斯卡命名法,以C#类名命名,拓展名小写. 示例: GameManager.cs 2 文件注释 每个文件头须包含注释说明,文件头位置指的是文件最 ...

随机推荐

  1. mysql 安装以及卸载 CentOS 6.9

    mysql官网下载地址:https://dev.mysql.com/downloads/mysql/ 本次操作系统是    阿里云服务器 CentOS 6.9 64位 下载得到tar 包: mysql ...

  2. Java Jdk 环境配置和测试

    测试jdk:1.6 安装完jdk1.6以后,在我的电脑中找到环境变量配置 在系统变量的Path 中输入 ;E:\Program Files (x86)\Java\jdk1.6.0_01\bin(路径根 ...

  3. shell代码模板

    批量ssh登录机器 #site_search_hosts 10.4.16.205,10.4.20.87,10.4.20.88,10.4.20.89,10.4.20.90,10.4.20.92,10.4 ...

  4. 摄像机模型 (Camera Model)

    摄像机通过成像透镜将三维场景投影到摄像机二维像平面上,这个投影可用成像变换描述,即摄像机成像模型.摄像机成像模型有不同描述方式,本节首先介绍机器视觉中的常用坐标系,然后介绍摄像机的线性模型和非线性模型 ...

  5. Murano Weekly Meeting 2016.07.05

    Meeting time: 2016.July.05 1:00~2:00 Chairperson:  Kirill Zaitsev, from Mirantis Meeting summary: 1. ...

  6. 利用nginx的fastcgi_cache模块来做缓存

    nginx不仅有个大家很熟悉的缓存代理后端内容的proxy_cache,还有个被很多人忽视的fastcgi_cache. proxy_cache的作用是缓存后端服务器的内容,可能是任何内容,包括静态的 ...

  7. php字符串函数详解

    nl2br 功能:化换行符为<br> <?php $str = "cat isn't \n dog"; $result = nl2br($str); echo $ ...

  8. Object公用方法

    Object是所有类的父类,任何类都默认继承Object. Object类到底实现了哪些方法?   1.clone方法 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否 ...

  9. mysql关键字执行顺序

    from on join where group by having select distinct union order by 昨天去58面试,之前的java基础和数据结构算法之类的都还可以,最后 ...

  10. CSS Grid 布局学习笔记

    CSS Grid 布局学习笔记 好久没有写博客了, MDN 上关于 Grid 布局的知识比较零散, 正好根据我这几个月的实践对 CSS Grid 布局做一个总结, 以备查阅. 1. 基础用法 Grid ...