编程规范基础学习笔记

基本原则:
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

可移植性:

时间: 2024-12-20 12:23:35

编程规范基础学习笔记的相关文章

linux应用编程基础学习笔记

********************************************************            --文件I/O-- 文件:文本文件:存储量大,速度慢,便于字符操作二进制文件:存储量小,速度快,便于存放中间结果 普通文件:设备文件: ---C标准函数---:Buffered I/O,高级文件系统,在用户空间开辟缓冲区,流操作(stream)#include<stdio.h> typedef struct{ int _fd;      //文件号 int _

《javascript DOM 编程艺术》学习笔记(一)

书籍已经看完了前六章的内容,有了一定的编程基础后觉得本书内容相对来说过于简单,应该是完全针对于初学者的(或者如作者所说是写个Web设计师的),作者在表述一个问题,一句代码都解释得非常啰嗦与重复,不过从书中学习到更多的,也是作者想让读者体会的是让大家理解DOM脚本编程技术背后的思路和原则,作者特别以早期Javascript的滥用来强调Web的规范与标准,这一点是非常值得学习的,也是一个程序员的基本素养. 截止到第六章,将所学到的知识点归纳如下: 1.基本语法:与php一样是弱类型语言,虽然功能强大

java基础学习笔记day01

java基础学习笔记day01 1.软件开发: 软件:按照特定顺序组织的计算机数据和指令的集合 开发:软件的制作过程 软件开发:借助开发工具和计算机语言制作软件 2.java概述: java之父:詹姆斯·高斯林 JDK:java开发环境 jre:java运行环境 JVM:java虚拟机 java跨平台是因为,JVM能在不同的平台运行,JVM是跨平台的 JavaSE:标准版 JavaME:手机端,物联网 JavaEE:企业版,互联网项目 3.java语言特点: 简单性 解释性 面向对象 高性能 分

js基础学习笔记(二)

2.1  输出内容(document.write) document.write() 可用于直接向 HTML 输出流写内容.简单的说就是直接在网页中输出内容. 第一种:输出内容用“”括起,直接输出""号内的内容. <script type="text/javascript"> document.write("I love JavaScript!"); //内容用""括起来,""里的内容直接输出.

js基础学习笔记(一)

* 在js编写过程中,尽量保持统一使用单引号 'XXXX': * 所有变量都要声明 var,避免全局函数调用的冲突: 1.1    输出内容 docment.write(‘aileLi’); 改变某ID元素样式 docment.getElementById(‘ID’).style.color=’样式参数’; 1.2   输出弹出框 alert(‘aileLi’); 1.5  什么是变量?  从字面上看,变量是可变的量: 从编程角度讲,变量是用于存储某种/某些数值的存储器. 定义变量使用关键字va

ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法

一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归.所以抛弃之前的那种事件响应的模型,抛弃服务器端控件也理所当然. 但是,如果手写Html标签效率又比较低,可重用度比较低.这时,我们该怎样来提高效率呢?首先,经过上篇我们知道可以通过ViewData传递数据,于是我们可以写出以下的Html代码: <input name="UserName&quo

QT基础学习笔记

Qt简介:1991, 挪威奇趣科技Trolltech开发的跨平台c++图形用户界面(GUI)应用程序开发.2008,被诺基亚收购2012,转让给芬兰的Digia公司. 商业版:专业版,企业版: // 开源版(GNU) 优势:1.跨平台 2.面向对象 3.丰富API 类库  4.可视化编程 5,时间驱动机制 JAVA--compile once, run anywhere    一次编译,到处运行Qt-- wrire once ,comile anywhere     一次编写,到处编译 桌面操作

linux系统驱动基础学习笔记

Linux驱动: 角色:应用程序 API      操作系统      驱动       实际硬件 功能:1.对设备进行初始化和释放2.把数据从内核传送到硬件和从硬件读取数据3.检测和处理设备出现的错误 Linux驱动程序类型:字符设备:由文件系统管理    (通过设备文件访问)块设备:由文件系统管理网络设备:由协议栈管理      (通过socket访问) 查看系统设备文件ls -l /devcat /proc/devicescat /sys/power/state 属性:文件类型   主设备

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.