软件开发代码规范C语言.docx
《软件开发代码规范C语言.docx》由会员分享,可在线阅读,更多相关《软件开发代码规范C语言.docx(21页珍藏版)》请在冰豆网上搜索。
软件开发代码规范C语言
XX产品研究部
文档编号
产品版本
密级
开发适用
共页
收文:
XX产品研究部软件开发人员
软件开发代码规范
(仅供内部使用)
拟制:
周超
日期:
2011-5-11
审核:
核准:
签发:
文档版本:
V0.11
文件修改记录
修改日期
版本
修改页码、章节、条款
修改描述
作者
2011-4-29
0.1
创建初稿
0.11
3.3数据注释
4.3类型命名
4.4变量命名
4.6函数命名
1)修改3.4数据注释【规则3-4-3】全局变量注释例子
2)在“4.3类型命名”、“4.4变量命名”、“4.6函数命名”中,增加对前缀、关键缩写词等可以适当全部大写的处理。
第一章原则
本文档的目的是提供一个公共的编码规范。
这个规范详细阐述在编码时要怎样写、不要怎样写,旨在提高代码的可读性、可维护性,使代码易于管理,使所有人可以集中精力去实现内容,而非处理各种复杂的表现形式。
使代码易于管理的方法之一是增强代码一致性,让别人可以读懂你的代码是很重要的,保持统一编程风格意味着可以轻松根据“模式匹配”规则推断各种符号的含义。
创建通用的、必需的习惯用语和模式可以使代码更加容易理解。
虽然在某些情况下改变一些编程风格可能会是好的选择,但我们还是应该遵循一致性原则,尽量不这样去做。
关键在于保持一致。
第二章排版
2.1空行
●【规则2-1-1】在每个函数、结构体、枚举定义结束之后都要加空行。
●【规则2-1-2】在一个函数体内,逻辑密切相关的语句之间不加空行,其它地方应加空行分隔。
structst1
{
…
};
//空行
enum
voidFunction1(…)
}
voidFunction2(…)
while(condition)
statement1;
if(condition)
statement2;
else
statement3;
statement4;
函数之间的空行函数内部的空行
●【规则2-1-3】相对独立的程序块之间、变量说明之后必须加空行。
if(!
is_lock_card_succ)
...//programcode
GetLockPhoneInfo(&st_lock_phone_info);
//空格
不规范代码规范代码
2.2代码行
●【规则2-2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。
这样的代码容易阅读,并且方便于写注释。
●【规则2-2-2】if、for、while、do等语句自占一行,执行语句不得紧跟其后。
不论执行语句有多少都要加{}。
这样可以防止书写失误。
intwidth,height,depth;//宽度高度深度
intwidth;//宽度
intheight;//高度
intdepth;//深度
X=a+b;y=c+d;z=e+f;
x=a+b;
y=c+d;
z=e+f;
if(widthif(width{dosomething();}for(initialization;condition;update)dosomething();other();for(initialization;condition;update){dosomething();}//空行other();不规范代码规范代码2.3代码行内的空格说明:空格的目的在于更清晰的代码。●【规则2-3-1】关键字之后要留空格。const、static等关键字之后至少要留一个空格,否则无法辨析关键字;if、for、while、switch等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。●【规则2-3-2】函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。●【规则2-3-3】‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。●【规则2-3-4】‘,’之后要留空格,如Function(x,y,z)。如果‘;’不是一行的结束符号,其后要留空格,如for(initialization;condition;update)。●【规则2-3-5】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=”“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符的前后应当加一个空格。●【规则2-3-6】一元操作符如“!”、“~”、“++”、“--”、“&”(地址运算符)等前后不加空格。●【规则2-3-7】象“[]”、“.”、“->”这类操作符前后不加空格。●【建议2-3-1】对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉一些空格,如for(i=0;i<10;i++)和if((a<=b)&&(c<=d))voidFunc1(intx,inty,intz);voidFunc1(intx,inty,intz);if(year>=2000)if(year>=2000)if((a>=b)&&(c<=d))if((a>=b)&&(c<=d))if(a>=b&&c<=d)for(i=0;i<10;i++)for(i=0;i<10;i++)for(i=0;i<10;i++)x=aa:b;x=aa:b;i++;int*x=&y;i++;int*x=&y;array[5]=0;a.Function();b->Function();array[5]=0;a.Function();b->Function();良好风格不良风格2.4对齐缩进●【规则2-4-1】程序块要采用缩进风格编写。●【规则2-4-2】对齐使用TAB键,TAB键宽度设置为4个空格。说明:应注意使用不同编辑器时,TAB键设置不同造成的排版不同;应注意某些编辑器在识别、显示TAB键上存在问题;最终排版应以在项目的主代码编辑器(如VC、SourceInsight等)中显示一致统一、整洁清晰为准。SourceInsight中设置:Options->DoucumentOptions->“TabWidth:4”●【规则2-4-3】函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。●【规则2-4-4】程序块的分界符(如‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。for(...){...//programcode}for(...){...//programcode}if(...){...//programcode}if(...){...//programcode}voidexample_fun(void){...//programcode}voidexample_fun(void){...//programcode}不规范代码规范代码●【规则2-4-5】预处理指令不需要缩进,总是从行首开始。即使预处理指令位于缩进代码块中,指令也应从行首开始。//良好风格:预处理指令均从行首开始if(lopsided_score){#ifDISASTER_PENDING//Correct--StartsatbeginningoflineDropEverything();#ifNOTIFYNotifyClient();#endif#endifBackToNormal();}//不良风格:缩进的预处理指令if(lopsided_score){#ifDISASTER_PENDING//Wrong!The"#if"shouldbeatbeginningoflineDropEverything();#endif//Wrong!Donotindent"#endif"BackToNormal();}2.5长行拆分●【规则2-5-1】代码行最大长度宜控制在100至110个字符以内。代码行不要过长,否则眼睛看不过来,也不便于打印。●【规则2-5-2】较长的语句(>110字符)要分成多行书写;长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。●【规则2-5-3】循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分.长表达式要在低优先级操作符处划分新行,操作符放在新行之首。●【规则2-5-4】若函数或过程中的参数较长,则要进行适当的划分。if((very_longer_variable1>=very_longer_variable12)&&(very_longer_variable3<=very_longer_variable14)&&(very_longer_variable5<=very_longer_variable16)){dosomething();}virtualCMatrixCMultiplyMatrix(CMatrixleftMatrix,CMatrixrightMatrix);for(very_longer_initialization;very_longer_condition;very_longer_update){dosomething();}report_or_not_flag=((taskno&&(n7stat_stat_item_valid(stat_item))&&(act_task_table[taskno].result_data!=0));n7stat_str_compare((BYTE*)&stat_
if(width{dosomething();}for(initialization;condition;update)dosomething();other();for(initialization;condition;update){dosomething();}//空行other();不规范代码规范代码2.3代码行内的空格说明:空格的目的在于更清晰的代码。●【规则2-3-1】关键字之后要留空格。const、static等关键字之后至少要留一个空格,否则无法辨析关键字;if、for、while、switch等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。●【规则2-3-2】函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。●【规则2-3-3】‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。●【规则2-3-4】‘,’之后要留空格,如Function(x,y,z)。如果‘;’不是一行的结束符号,其后要留空格,如for(initialization;condition;update)。●【规则2-3-5】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=”“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符的前后应当加一个空格。●【规则2-3-6】一元操作符如“!”、“~”、“++”、“--”、“&”(地址运算符)等前后不加空格。●【规则2-3-7】象“[]”、“.”、“->”这类操作符前后不加空格。●【建议2-3-1】对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉一些空格,如for(i=0;i<10;i++)和if((a<=b)&&(c<=d))voidFunc1(intx,inty,intz);voidFunc1(intx,inty,intz);if(year>=2000)if(year>=2000)if((a>=b)&&(c<=d))if((a>=b)&&(c<=d))if(a>=b&&c<=d)for(i=0;i<10;i++)for(i=0;i<10;i++)for(i=0;i<10;i++)x=aa:b;x=aa:b;i++;int*x=&y;i++;int*x=&y;array[5]=0;a.Function();b->Function();array[5]=0;a.Function();b->Function();良好风格不良风格2.4对齐缩进●【规则2-4-1】程序块要采用缩进风格编写。●【规则2-4-2】对齐使用TAB键,TAB键宽度设置为4个空格。说明:应注意使用不同编辑器时,TAB键设置不同造成的排版不同;应注意某些编辑器在识别、显示TAB键上存在问题;最终排版应以在项目的主代码编辑器(如VC、SourceInsight等)中显示一致统一、整洁清晰为准。SourceInsight中设置:Options->DoucumentOptions->“TabWidth:4”●【规则2-4-3】函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。●【规则2-4-4】程序块的分界符(如‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。for(...){...//programcode}for(...){...//programcode}if(...){...//programcode}if(...){...//programcode}voidexample_fun(void){...//programcode}voidexample_fun(void){...//programcode}不规范代码规范代码●【规则2-4-5】预处理指令不需要缩进,总是从行首开始。即使预处理指令位于缩进代码块中,指令也应从行首开始。//良好风格:预处理指令均从行首开始if(lopsided_score){#ifDISASTER_PENDING//Correct--StartsatbeginningoflineDropEverything();#ifNOTIFYNotifyClient();#endif#endifBackToNormal();}//不良风格:缩进的预处理指令if(lopsided_score){#ifDISASTER_PENDING//Wrong!The"#if"shouldbeatbeginningoflineDropEverything();#endif//Wrong!Donotindent"#endif"BackToNormal();}2.5长行拆分●【规则2-5-1】代码行最大长度宜控制在100至110个字符以内。代码行不要过长,否则眼睛看不过来,也不便于打印。●【规则2-5-2】较长的语句(>110字符)要分成多行书写;长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。●【规则2-5-3】循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分.长表达式要在低优先级操作符处划分新行,操作符放在新行之首。●【规则2-5-4】若函数或过程中的参数较长,则要进行适当的划分。if((very_longer_variable1>=very_longer_variable12)&&(very_longer_variable3<=very_longer_variable14)&&(very_longer_variable5<=very_longer_variable16)){dosomething();}virtualCMatrixCMultiplyMatrix(CMatrixleftMatrix,CMatrixrightMatrix);for(very_longer_initialization;very_longer_condition;very_longer_update){dosomething();}report_or_not_flag=((taskno&&(n7stat_stat_item_valid(stat_item))&&(act_task_table[taskno].result_data!=0));n7stat_str_compare((BYTE*)&stat_
dosomething();
for(initialization;condition;update)
other();
2.3代码行内的空格
说明:
空格的目的在于更清晰的代码。
●【规则2-3-1】关键字之后要留空格。
const、static等关键字之后至少要留一个空格,否则无法辨析关键字;if、for、while、switch等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。
●【规则2-3-2】函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。
●【规则2-3-3】‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。
●【规则2-3-4】‘,’之后要留空格,如Function(x,y,z)。
如果‘;’不是一行的结束符号,其后要留空格,如for(initialization;condition;update)。
●【规则2-3-5】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=”“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符的前后应当加一个空格。
●【规则2-3-6】一元操作符如“!
”、“~”、“++”、“--”、“&”(地址运算符)等前后不加空格。
●【规则2-3-7】象“[]”、“.”、“->”这类操作符前后不加空格。
●【建议2-3-1】对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉一些空格,如for(i=0;i<10;i++)和if((a<=b)&&(c<=d))
voidFunc1(intx,inty,intz);
if(year>=2000)
if((a>=b)&&(c<=d))
if(a>=b&&c<=d)
for(i=0;i<10;i++)
x=a
a:
b;
i++;
int*x=&y;
array[5]=0;
a.Function();
b->Function();
良好风格不良风格
2.4对齐缩进
●【规则2-4-1】程序块要采用缩进风格编写。
●【规则2-4-2】对齐使用TAB键,TAB键宽度设置为4个空格。
应注意使用不同编辑器时,TAB键设置不同造成的排版不同;应注意某些编辑器在识别、显示TAB键上存在问题;最终排版应以在项目的主代码编辑器(如VC、SourceInsight等)中显示一致统一、整洁清晰为准。
SourceInsight中设置:
Options->DoucumentOptions->“TabWidth:
4”
●【规则2-4-3】函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。
●【规则2-4-4】程序块的分界符(如‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。
在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。
for(...){
for(...)
if(...)
voidexample_fun(void)
●【规则2-4-5】预处理指令不需要缩进,总是从行首开始。
即使预处理指令位于缩进代码块中,指令也应从行首开始。
//良好风格:
预处理指令均从行首开始
if(lopsided_score)
#ifDISASTER_PENDING//Correct--Startsatbeginningofline
DropEverything();
#ifNOTIFY
NotifyClient();
#endif
BackToNormal();
//不良风格:
缩进的预处理指令
#ifDISASTER_PENDING//Wrong!
The"#if"shouldbeatbeginningofline
#endif//Wrong!
Donotindent"#endif"
2.5长行拆分
●【规则2-5-1】代码行最大长度宜控制在100至110个字符以内。
代码行不要过长,否则眼睛看不过来,也不便于打印。
●【规则2-5-2】较长的语句(>110字符)要分成多行书写;长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。
拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
●【规则2-5-3】循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分.长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
●【规则2-5-4】若函数或过程中的参数较长,则要进行适当的划分。
if((very_longer_variable1>=very_longer_variable12)
&&(very_longer_variable3<=very_longer_variable14)
&&(very_longer_variable5<=very_longer_variable16))
virtualCMatrixCMultiplyMatrix(CMatrixleftMatrix,
CMatrixrightMatrix);
for(very_longer_initialization;
very_longer_condition;
very_longer_update)
report_or_not_flag=((taskno&&(n7stat_stat_item_valid(stat_item))&&(act_task_table[taskno].result_data!=0));n7stat_str_compare((BYTE*)&stat_
&&(n7stat_stat_item_valid(stat_item))
&&(act_task_table[taskno].result_data!
=0));
n7stat_str_compare((BYTE*)&stat_
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1