ISOS编程规范说明书文档格式.docx
《ISOS编程规范说明书文档格式.docx》由会员分享,可在线阅读,更多相关《ISOS编程规范说明书文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
![ISOS编程规范说明书文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/16/41b65fbd-9c0a-46b3-95af-fa7dd0616a95/41b65fbd-9c0a-46b3-95af-fa7dd0616a951.gif)
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);
}
模块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<
STUDENT_NUM;
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<
b?
a:
b;
x=a<
b?
a:
b;
//不好的风格
int*x=&
y;
int*x=&
y;
6表达式与基本语句
6.1运算表达式
不要编写太复杂的复合表达式;
i=a>
=b&
&
c<
d&
c+f<
=g+h;
//复合表达式过于复杂
不要有多用途的复合表达式;
d=(a=b+c)+r;
//应拆分为两个语句:
a=b+c;
d=a+r;
如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。
if(a|b&
a&
c)//不良的风格
if((a|b)&
(a&
c))//良好的风格
注意:
只需记住加减运算的优先级低于乘除运算,其它地方