基本原则:
1.直观
2.简捷
3.不要省

*****************************************************************************************

---命名规则---
常量名:大写,HAVE_ARCH_STRNCAT
变量名:
    1.英文单词组合,可望文生义,避免无意义的数字编号取名。size,len,val,flag
    2.简捷,不要过长。
    3.名词性词组:DataGotFromSD, CurrentVal   ?    current_val  ?   currentVal?
    4.局部变量:n,m
      i,j,k一般用于int型变量(循环)
               c,ch一般用于字符型变量
               str表示字符串
     a表示数组
     p表示指针
    5.定义变量时(尤其是指针),必须要先初始化。
    6.不要使用八进制常数。
    7.不要省结构体名:   typedef struct innode
           {
     int num;
      }INNODE;
函数名
     1.动词性词组:GetDataFromSD()
     2.注意区分字母和数字l,1,o,0
     3.函数名不要用在其他地方。

*****************************************************************************************

---流程控制语句编写规范---
if:
1.与零值比较:
      1.bool变量: if(bTestFlag);    if(!bTestFlag);
 2.int变量 :if( a ==0)  ;if(a!=0)
 3.float变量 :const float EXP = 0.000001(float类型能保留6位小数)
   if ( a < EXP && a >-EXP)
 3.指针变量:if(NULL==p);   if(NULL!=p)

2.条件表达式中,有产生布尔类型数据的表达式中不能有赋值。
错误:if((x=y)!=0)    if(x=y)

3.括号应该对齐写,代码应该缩进4个字符(不用TAB)
if(condition)
{
    //code
}
else
{
    //code
}

3.先处理正常情况,再处理异常情况。

4.if -elseif- 最后应该加else结束。

switch case
1.少分支用if-else,多分支用switch-case
2.switch中表达式中不要有浮点数,不应是产生布尔类型值。
3.case后加整型或字符型常量。每个case实现一个功能,后面必须加break,不要加return;
4.case可按数字或字母顺序排列,正常情况或执行频率高的放前面。
5.case语句要精练<20行,可写成子函数。
6.最后必须加default分支默认处理,default不要用来正常处理。

for循环
1.直观:控制变量采用半闭半开更直观,不要在循环体内修改循环变量。
 for(i=0;i<10;i++)

2.精简:循环内不要过长<20行,循环嵌套不要超过3层。

3.长循环放内层。
for(i=0;i<3;i++)
{
    for(j=0;j<10;j++)
    {
        //
    }
}

goto
为了便于理解:禁用goto

*****************************************************************************************

---函数编写规范---

1.自己的代码得边写边注释,每个函数必须有注释。
 加头:/***********************
  *FunName             :
  *CreateDate          :
  *Author/Corporation  :
  *Description         :
  *Param               :
  *ReturnCode          :
  ************************/

2.修改别人的代码的时候不要轻易删除,得注释掉后另写。
  /* liaoyi 2013-9-21 start */

/* liaoyi 2013-9-21 end */

3.函数定义结束后,需要加空行。
       4.函数体内,变量定义和函数语句之间需要加空行。
  5.逻辑上不同作用的代码放一起,不同作用的用空行。

6.函数参数名字,返回类型不要省,没有用void
     void fun(void)

6.合理缩进,使用4个字符缩进量,不要使用TAB,不同编译器防止混乱。
   if(0==b)
   {
            a=10;
   }
   else
   {
            a=20;
        }

7.长表达式得分行写,操作符放前头。
   8,运算表达式不要太复杂,多用#define,优先级括号不要省。

函数设计规范:
 1.返回类型void时,不能用return,用return时不要用多个,用临时变量保存返回值,在函数结尾统一    返回。
   返回类型不能与函数名在语义上冲突 如int getchar(void); 
 2.形参名也应该有意义,如:_ip,_len,strDest,strSrc等。
      3.输入的参数在调用函数之前,或者调用之后(入口检验用assert宏),必须错误检查,是否为0等。
 4.参数是指针,如果仅用作输入,用const防止意外修改。
  int fun(const int *p)
 5.局部变量避免重用函数名,不能返回地址,
 6.少用static静态局部变量。
      7.尽量少用全局变量。
      8.指针运算只能在指向同一数组上。不同数组结果未知。
 
      8.少用:errno,<signal.h>, <stdio.h>, <stdlib.h>,<time.h>尤其是嵌入式产品中。

*****************************************************************************************
     ---注释规范---
1.注释:/* */ ,//
  /**/ :1.会被编译器用空格代替
   int/*...*/i;   ->对,解析为空格
        in/*...*/t i;  ->错。
   2./*总是和离它最近的*/配对,所以不能嵌套。
       3.y=x/*p,这里编译器解析/*为注释的开始。
 
   //: 双引号中都被解析为字符串常量
 char *s="abcdef   //hijk ";

2.注释规范:
   1.编写代码边注释
   2.注释简单直观,代码右边或上面,不要在代码中间或代码下面注释。
   3.全局数据必须加注释。
   3.注释尽量用英文。
   4.复杂的分支,循环要加注释:end “if(...)”。

3.反斜杠:‘\’
  1.断行连接符,编译器自动将下一行字符连接到上一行。注意:反斜杠后和下一行前不能有空格。
  2.转义字符, /n,/t,/a
    //,/',
              /ddd,/xhh,八进制和十六进制ASCII码,可表示任意一个C字符集中符号。

*****************************************************************************************
     ---内存管理---

野指针:定义了一个指针,没有给它初始化,里面是一个随机地址,容易出现内存错误。

常见内存错误:
1.内存泄露:内存分配后没有释放
malloc: char *p=(char *)malloc(100*sizeof(char));
 1.分配后必须强制转换为需要的类型
      2.非配的大小用sizeof提高可移植性
      3.malloc的内存是堆中剩余的连续内存,不足时申请会失败,返回NULL。所以必须用if(NULL!=p)验证
 4.malloc(0)也会返回一个地址,但是无法使用大小为0的内存。这时if(NULL!=p)不起作用。

free:断开指针变量与这块内存的关系,操作系统可销毁。
     1.指针中的地址并没有改变,堆的内存中的值也没有改变,只是不能用了而已。
     2.molloc一次必须free一次。free少了内存泄露,free多了会出错。
     3.free后一定要加 p=NULL,把野指针拴住。
2.内存崩溃:
     1.野指针访问了不能访问的内存:定义后必须初始化。int *p=NULL;
     2.数组等访问越界
     3.使用了已经释放的内存
2.内存碎片:不断的malloc和free,导致内存碎片多,无法申请大的内存。
           所以,少用malloc和free!

*****************************************************************************************

---文件结构---

头文件,源文件均可包含:
/************************************************************************
*File Name           :FN_FileName.h
*Copyright           :2003-2008 XXXX Corporation,All Rights Reserved.
*Module Name         :DrawEngine/Display
*CPU                 :ARM7
*RTOS                :Tron
*Create Date         :2008/10/01
*Author/Corporation  :WhoAmI/yourcompany name
*AbstractDescription :Place some descriptionhere.

*--------------------------RevisionHistory-------------------------
*No Version Date     Revised By  Item          Description
*1  V0.95   08.05.18 WhoAmI      abcdefghijklm  WhatUDo
*
************************************************************************/

头文件:

#ifndef  __FN_FILENAME_H
#define  __FN_FILENAME_H

#define D_DISP_BASE

#include "IncFile.h"

#define  MAX_TIMER_OUT  (4)

typedef structCM_RadiationDose
{
   unsigned charucCtgID;
   charcPatId_a[MAX_PATI_LEN];
}CM_RadiationDose_st,*CM_RadiationDose_pst;

unsigned intMD_guiGetScanTimes(void);


#endif

源代码:

#define  D_DISP_BASE

#include "IncFile.h"

typedef struct CM_RadiationDose
{
unsigned char ucCtgID;
char cPatId_a[MAX_PATI_LEN];
}CM_RadiationDose_st, *pCM_RadiationDose_st;

unsigned int MD_guiGetScanTimes(void);

extern unsigned int MD_guiHoldBreathStatus;

static unsigned int nuiNaviSysStatus;

Function Define Section

可移植性:

转载于:https://www.cnblogs.com/liaoyi425/p/3766525.html

编程规范基础学习笔记相关推荐

  1. Uber 《Go语言编程规范》学习笔记(一)

    Interface 合理性验证 在编译时验证接口的符合性.这包括: 将实现特定接口的导出类型作为接口API 的一部分进行检查 实现同一接口的(导出和非导出)类型属于实现类型的集合 任何违反接口合理性检 ...

  2. 日语课程0基础学习笔记——第一课

    学习目标: 编程0基础学习笔记--前言 这是一个个人使用的日语学习记录博客!根据B站的up日语教程一直跟下来,从第一天开始记录.后续会把我学习的内容和知识点尽量多的记录在这个博客中,不仅是方便自己复习 ...

  3. 《Java并发编程实践》学习笔记之一:基础知识

    <Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念:  (2)进程:是一种活动,它是由一个动作序列组成 ...

  4. 【C#编程基础学习笔记】6---变量的命名

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...

  5. 【C#编程基础学习笔记】4---Convert类型转换

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...

  6. 8.Python基础学习笔记day8-正则表达式、网络编程、进程与线程

    8.Python基础学习笔记day8-正则表达式.网络编程.进程与线程 一.正则表达式 ''' 1. [1,2,3,4]中任意取3个元素排列: A43 = 4x3x2 = 24itertools.pe ...

  7. Python基础学习笔记之(一)

    Python基础学习笔记之(一) zouxy09@qq.com http://blog.csdn.net/zouxy09 前段时间参加微软的windows Azure云计算的一个小培训,其中Pytho ...

  8. 8. SpringBoot基础学习笔记

    SpringBoot基础学习笔记 课程前置知识说明 1 SpringBoot基础篇 1.1 快速上手SpringBoot SpringBoot入门程序制作 1.2 SpringBoot简介 1.2.1 ...

  9. guido正式发布python年份_Python 基础学习笔记.docx

    Python 基础学习笔记 基于<Python语言程序设计基础(第2版)> 第一部分 初识Python语言 第1章 程序设计基本方法 1.1 计算机的概念 计算机是根据指令操作数据的设备, ...

  10. Python3 基础学习笔记 C01【变量和简单数据类型】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

最新文章

  1. 在python中定义类时、运算符重载_自定义 Python 类中的运算符和函数重载(上)...
  2. 二分图最小覆盖的Konig定理及其证明
  3. ubuntu(linux)下安装openCV(ffmpeg导致的编译不通过的解决办法)
  4. 测试点2详解:1045 快速排序 (25分)——23行代码满分
  5. java知识回顾_Java – 2012年回顾和未来预测
  6. 20145210 20145226实验一
  7. Maven命令安装JAR包到本地仓库
  8. 幼儿园观察记录的目的和目标_幼儿园游戏观察记录
  9. 计算机有哪些交叉专业研究生,与理工科交叉的计算机专业考研方向有哪些?
  10. 共享换电:车企筑垒,宁王拆墙
  11. 【元器件学习笔记—电阻】(7)——电阻串并联电路
  12. python eel 多线程_Python的一个轻量级桌面GUI开发第三方库:Eel
  13. SpringBoot基础知识
  14. 思途cms php文件说明,思途旅游CMS系统二次开发说明文档(v5.0).pdf
  15. linux无法安装at命令,在Ubuntu/Debian/CentOS/Fedora下安装At及各种At命令的用法
  16. 计算机开机最快设置,怎样让电脑开机更快
  17. 最短路(弗洛伊德——最短路)
  18. python框架Django数据库类型
  19. Python字典嵌套
  20. VCS命令详解(二):仿真命令

热门文章

  1. OpenCV环境搭建(Windows+Visual studio)及Hello World
  2. 2015年9月01日【磁盘和文件系统管理】-JY1506402-19+liuhui880818
  3. 《专家系统破解篇 六、IL代码破解--配套乱说》之 FeatherskyExpertSystem
  4. eclipse 设置和快捷键
  5. 使用tcpdump抓Android网络包
  6. springcloud ip部署_php接入SpringCloud微服务框架
  7. java大于0的正则_求一个 大于0且小于1 的正则表达式(无论几位小数)
  8. 月结 sap_SAP的SD模块:从DN到Billing再到Invoice
  9. java栈链_Java实现链栈
  10. php api接口怎么写,php如何写api接口?