ISOS编程规范说明书.docx

上传人:b****5 文档编号:2854409 上传时间:2022-11-16 格式:DOCX 页数:21 大小:26.31KB
下载 相关 举报
ISOS编程规范说明书.docx_第1页
第1页 / 共21页
ISOS编程规范说明书.docx_第2页
第2页 / 共21页
ISOS编程规范说明书.docx_第3页
第3页 / 共21页
ISOS编程规范说明书.docx_第4页
第4页 / 共21页
ISOS编程规范说明书.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

ISOS编程规范说明书.docx

《ISOS编程规范说明书.docx》由会员分享,可在线阅读,更多相关《ISOS编程规范说明书.docx(21页珍藏版)》请在冰豆网上搜索。

ISOS编程规范说明书.docx

ISOS编程规范说明书

 

ISOSV5.0

编程规范说明书

 

2012年2月

 

目录

 

1引言1

1.1编写目的1

2概述1

2.1目标1

2.2适用范围1

2.3需求1

2.4局限1

3编程规范总原则1

4标识符2

4.1变量名2

4.1.1不同作用域变量的命名2

4.1.2变量类型的重定义2

4.1.3不同类型变量的命名(匈牙利命名法)2

4.1.4指针变量的命名3

4.1.5函数指针变量的命名3

4.1.6在某一模块中定义的全局变量,变量名的开始需有模块名。

4

4.2函数名4

4.3数据结构4

5排版4

5.1用缩进格式书写代码5

5.2长语句5

5.3空行和空格的使用5

6表达式与基本语句6

6.1运算表达式6

6.2if语句6

6.2.1布尔变量与零值比较6

6.2.2整型变量与零值比较7

6.2.3浮点变量与零值比较7

6.2.4对if语句的补充说明7

6.3Switch语句7

7常量8

7.1为什么要用常量8

7.2定义常量的方法8

7.2.1#define宏定义8

7.2.2const常量9

7.2.3枚举9

7.3函数返回值常量定义9

7.4特性开关宏定义9

8注释9

8.1注释的基本概念10

8.2注释的准确性10

8.3变量、常量的注释10

8.4函数的注释11

8.5修改注释12

8.6/**/、/**以及/**<12

9文件布局12

9.1C以及h文件头要求12

9.2C源代码文件布局要求13

9.3H头文件要求15

9.4H头文件布局15

9.5ip_pub.h16

9.6ip_def.h16

9.7ip_ext.h17

9.8ip_fun.h17

9.9各个H头文件关系17

1引言

1.1编写目的

作为一个大型的项目,每个工程师的编程习惯都不相同,所以对编程风格、规范进行统一就显得十分必要。

2概述

2.1目标

本文档为统一ISOS平台的编程规范而写作。

2.2适用范围

本文档虽然为ISOS平台制作,但可以推广到其他项目组。

2.3需求

Ø程序最重要的是正确性,其次是可维护性,最后才是效率;

Ø学习如何写优美的程序与学习如何正确地编写代码同样重要;

Ø让程序尽量简单易懂,即使违背了某些规则也无关紧要;

Ø一个运行正常但没有注释的程序如同一个等待爆炸的定时炸弹,因为早晚会有人修改或升级这个程序;

Ø好风格应该成为一种习惯。

如果你在开始写代码时就关心风格问题,如果你花时间去审视和改进它,你将会逐渐养成一种好的编程习惯。

一旦这种习惯变成自动的东西,你的潜意识就会帮你照料许多细节问题,甚至你在工作压力下写出的代码也会更好。

2.4局限

此文档完成时间比较仓促,需要在后续实践中逐步完善。

3编程规范总原则

Ø本规范具有强制性,一旦制定,必须按照规范执行

Ø规范在未经批准修改之前,必须按照现行规范执行

4标识符

标识符的命名要清晰、明了,有明确含义。

使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。

标识符应当采用英文单词或其组合,切忌使用汉语拼音来命名。

4.1变量名

4.1.1不同作用域变量的命名

Ø局部变量尽量包含较多的信息;

Ø全局变量以首字母以g_开始命名;

Ø定义类型和宏定义常数以大写字母命名;

Ø变量的作用域越大,它的名字所带有的信息就应该越多。

局部变量:

ULONGulStudentAge;

全局变量:

ULONGg_ulSudentAge;

宏定义常数:

#defineSTUDENT_NUM10

类型定义:

typedefINT16Sint;

4.1.2变量类型的重定义

由于变量类型比较多,为了整个项目的统一,对一些常用的变量类型进行重新定义:

typedefcharCHAR;//有符号的单字节变量类型

typedefunsignedcharUCHAR;//无符号的单字节变量类型

typedefshortintSHORT;//有符号的双字节变量类型

typedefunsignedshortintUSHORT;//无符号的双字节变量类型

typedeflongLONG;//有符号的四字节变量类型

typedefunsignedlongULONG;//无符号的四字节变量类型

typedeflonglongLLONG;//有符号的八字节变量类型

typedefunsignedlonglongULLONG;//无符号的八字节变量类型

typedeffloatFLOAT;//单精度浮点变量类型

typedefdoubleDOUBLE;/双精度浮点变量类型

typedefvoidVOID;

typedefintBOOL;//BOOL变量

typedefstruct{volatileintcounter;}ATOMIC_S;//需要原子操作的变量类型

4.1.3不同类型变量的命名(匈牙利命名法)

匈牙利命名法是一种命名约定。

匈牙利命名法把变量的类型 (或者它的预期使用) 等信息编码在变量名中。

一些常用的匈牙利命名法前缀

数据类型前缀例子

CHARccInChar

UCHARucucOutChar

SHORTssReturnValue

USHORTususControlWord

LONGllNumRecs

ULONGululLength

LLONGllllNumRecs

ULLONGullullLength

FLOATffStatic

DOUBLEddLength

BOOLblblFlag

TXT_BOX_SststBox//结构

enumTXT_BOX_MememBox//枚举

unionPROT_UununProto//联合

ATOMIC_SatatDataRef//原子

4.1.4指针变量的命名

对于指针的定义,名称大小写根据指针为全局/局部变量来定,但指针名必须以小写的“p”开头。

如:

ULONG*g_pulDay;//全局指针

ULONG*pulKeyday;//局部指针

ULONG**ppulKeyDay;//指针的指针

4.1.5函数指针变量的命名

对于函数指针变量必须以pfunc开头。

如:

main()

{

ULONGSSP_Max(LONG,LONG);

ULONG(*pfuncMax)();//指向函数的指针申明

LONGa,b,c;

pfuncMax=SSP_Max;//给指向函数的指针赋值

SSP_Scanf(“%d,%d”,&a,&b);

c=(*pfuncMax)(a,b);//调用指向的函数

SSP_Printf(“a=%d,b=%d,max=%d”,a,b,c);

}

4.1.6在某一模块中定义的全局变量,变量名的开始需有模块名。

如:

模块KEY.C中的变量:

USHORTg_usKeyNum;

ULONGg_ulKeyNumBuff[10];

4.2函数名

Ø函数名的命名应象全局变量一样采用首字母大写方式

Ø函数名的开始应以“模块名_”的格式注明函数所属模块

例如:

KEY.C模块的函数

VOIDKEY_Init(VOID);

VOIDKEY_StartScan(VOID);

VOIDKEY_StopScan(VOID);

4.3数据结构

Ø数据结构名称必须以st开头

Ø数据结构必须重新定义为一个以_S结尾,紧接着大写字母表示的名称

例如:

typedefstructstTxtBox

{

ULLONG*pullTxt;//文字

ULLONGullTxtFont;//字体

ULLONGullSta;//文本框状态模式

ULLONGulWorkMod;//工作模式

}TXT_BOX_S;

5排版

名字的合理选择可以帮助理解程序。

同样,也应该以尽可能一目了然的形式书写语句。

这就像保持书桌整洁可以使你容易找到东西一样。

5.1用缩进格式书写代码

Ø函数或过程的开始、结构定义及循环、判断等语句中的代码都要采用缩进;

Ø缩进的空格数为4个;

Ø使用空格键,不使用TAB键;

Ø程序块的分界符(‘{’和‘}’)应各独占一行。

例:

for(i=0;i

{

if(fScore[i]>0)

{

total_score+=fScore[i];

}

}

5.2长语句

Ø较长的语句(多于80字符)要分成多行书写;

Ø长表达式要在低优先级操作符处划分新行,操作符放在新行之首;

Ø划分出的新行要进行适当的缩进,使排版整齐,语句可读;

Ø不允许把多个短语句写在一行中,即一行只写一条语句。

例:

修改前:

MeasData.TransT[dir]=TransT[dir]*SetData.Filter+TransT[dir]*(1-SetData.Filter);

修改后:

MeasData.TransT[dir]=TransT[dir]*SetData.Filter

+TransT[dir]*(1-SetData.Filter);

5.3空行和空格的使用

Ø相对独立的程序块之间、变量定义之后语句开始以前必须加空行;

Ø逗号、分号只在后面加空格;

Ø比较操作符、赋值操作符、算术操作符、逻辑操作符、位域操作符等双目操作符的前后加空格;

Ø“!

”、“~”、“++”、“--”、“&”等单目操作符前后不加空格;

Ø"->"、"."前后不加空格。

例:

VOIDFunc1(LONGlx,LONGly,LONGlz);//良好的风格

VOIDFunc1(LONGlx,LONGly,LONGlz);//不良的风格

x=a

a:

b;//良好的风格

x=a

a:

b;//不好的风格

int*x=&y;//良好的风格

int*x=&y;//不良的风格

6表达式与基本语句

6.1运算表达式

Ø不要编写太复杂的复合表达式;

例如:

i=a>=b&&c

Ø不要有多用途的复合表达式;

例如:

d=(a=b+c)+r;//应拆分为两个语句:

a=b+c;

d=a+r;

Ø如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。

例如:

if(a|b&&a&c)//不良的风格

if((a|b)&&(a&c))//良好的风格

注意:

只需记住加减运算的优先级低于乘除运算,其它地方

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1