代码规范说明.docx

上传人:b****5 文档编号:5241886 上传时间:2022-12-14 格式:DOCX 页数:17 大小:369.83KB
下载 相关 举报
代码规范说明.docx_第1页
第1页 / 共17页
代码规范说明.docx_第2页
第2页 / 共17页
代码规范说明.docx_第3页
第3页 / 共17页
代码规范说明.docx_第4页
第4页 / 共17页
代码规范说明.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

代码规范说明.docx

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

代码规范说明.docx

代码规范说明

代码开发规

对于新增代码或者修改的代码应按代码规要求进行编写。

一、通用规

1.1Kconfig文件:

格式:

注释部分以#开头,空一格开始写注释容。

一级容“config”顶头开始

二级容开头空白处为一个制表符,相当于8个空格

三级容开头空白处为一个制表符再加两个空格,即比二级容缩进两个空格

容:

help说明部分必须有,为第三级容,需说明帮助信息,分段的容需空一行,每块config间空一行。

以文件系统fs下的Kconfig示例如下图1.1,‘□’代表一个空格,短横线‘-’所占一行代表一个空行:

图1.1

#

#□Filesystemconfiguration

#

----------------------------------------------------------------

menu"Filesystems"

----------------------------------------------------------------

configEXT2_FS

□□□□□□□□tristate"Secondextendedfssupport"

□□□□□□□□help

□□□□□□□□□□Ext2isastandardLinuxfilesystemforharddisks.

□□□□□□□□□□Tocompilethisfilesystemsupportasamodule,choose□□□□□□□□□□Mhere:

themodulewillbecalledext2.Beaware□□□□□□□□□□howeverthatthefilesystemofyourrootpartition□□□□□□□□□□(theonecontainingthedirectory/)cannotbecompiled□□□□□□□□□□asamodule,andsothiscouldbedangerous.

----------------------------------------------------------------

□□□□□□□□□□Ifunsure,sayY.

-----------------------------------------------------------------

configEXT2_FS_XATTR

□□□□□□□□bool"Ext2extendedattributes"

□□□□□□□□dependsonEXT2_FS

□□□□□□□□help

□□□□□□□□□□Extendedattributesarename:

valuepairsassociated

□□□□□□□□□□withinodesbythekernelorbyusers(seetheattr(5)□□□□□□□□□□manualpage,orvisitfor□□□□□□□□□□details).

-----------------------------------------------------------------

□□□□□□□□□□Ifunsure,sayN.

 

1.2头文件.h和.c文件规说明

格式:

制表符宽度相当于8个空格

1.2.1文件首部注释

文件首部的注释用于说明文件信息,可选项目包括:

文件所属模块

主要函数实现

作者信息

信息

软件说明

以上容为可选信息,一个文件中不一定包含全部信息,由开发者根据重要性来确定。

注释格式必须是块注释形式,即:

以/*行开头,以*/行结束,中间每一行前面均加一个*,每行的*号在竖直方向是对齐排列的,容部分距离行首的距离为4个字符,每段容间空一行;作者信息部分若有多个作者,则每个作者单列一行,并与其他作者信息对齐;信息按时间段可分行说明,保持部对齐。

示例如下图1.2,其中方框'□'代表一个空格:

图1.2

/*

□*□□NSASecurity-EnhancedLinux(SELinux)securitymodule

*

□*□□ThisfilecontainstheSELinuxhookfunctionimplementations.

*

□*□□Authors:

StephenSmalley,

*ChrisVance,

*

□*□□Copyright(C)2001,2002NetworksAssociatesTechnology,Inc.

□*□□Copyright(C)2004-2005TrustedComputerSolutions,Inc.

□*

*

□*□□Thisprogramisfreesoftware;youcanredistributeitand/or

□*□□modifyitunderthetermsoftheGNUGeneralPublicLicense

□*□□version2,aspublishedbytheFreeSoftwareFoundation.

□*/

 

1.2.2代码注释

新增或修改的代码重要部分可以添加注释。

代码注释统一用’/*’和’*/’整块注释,注释容与’*’间用空格隔开,若注释是多行,则采用类似首部注释的格式,每行注释前面都有一个’*’。

(1)函数定义注释

注释可选项目:

函数说明/参数信息/返回值信息/使用信息

对一个函数的注释,每项初始位置缩进要一致;可以缩进一个空格的或几个空格,核代码一般缩进一个制表符。

注释项分段时段与段间空一行,如下图所示为函数iunique的注释,‘□’代表空格:

图1.3

/**

□*□□□□□□remove_inode_hash-removeaninodefromthehash

□*□□□□□□inode:

inodetounhash

□*

□*□□□□□□Removeaninodefromthesuperblock.

□*/

voidremove_inode_hash(structinode*inode)

{……}

图1.4

/*

□*□>0ifthefileisinuse

□*□=0ifthefileisnotinuse

□*□<0onfailure

□*/

asmlinkagelongsys_fcount(intop,void__user*data)

{……}

(2)代码块及单语句注释

对整块代码进行的注释放在整块代码前面,如对函数说明注释放在函数定义前面一行;注释与被注释代码的缩进保持一致;对单独一条语句的注释可以放在语句后面,同一性质的注释最好保持对齐。

图1.5

#include/*forUnixsockettypes*/

……

图1.6

if(dname_external(dentry)){

□□□□□□□□/*

□□□□□□□□*Bothexternal:

swapthepointers

□□□□□□□□*/

□□□□□□□□do_switch(target->d_name.name,dentry->d_name.name);

}else{

□□□□□□□□/*

□□□□□□□□*dentry:

internal,target:

external.Stealtarget's

□□□□□□□□*storageandmaketargetinternal.

□□□□□□□□*/

□□□□□□□□dentry->d_name.name=target->d_name.name;

□□□□□□□□target->d_name.name=target->d_iname;

}

 

1.2.3代码格式

空行:

代码块与代码块间至少空一行,同一类型的代码在不影响功能的情况下最好放在一块。

如include语句,包含库文件中的头文件放在一起,包含非库文件的头文件放在一起,两部分中间空一行;不同函数定义间空一行。

在函数,简单变量声明放在一起,与其他语句间空行,复杂的变量如结构体、枚举类型的定义须占用多行时,单独作为一块,后面空一行;一般if语句、while语句、for语句等这些基本c语言语句类型后空一行,这些语句中嵌套的语句建议后面也空一行。

goto语句到达的代码块,代码块名称顶头开始。

缩进:

第一级代码顶头开始,处于同一级的代码缩进保持一致。

后一级别的代码比前一级别的代码缩进一个制表符。

函数定义中参数分行列举时,后面的行应与第一个参数保持对齐;函数调用时出现参数需列多行的,也应与第一个参数保持对齐。

数组、结构体、枚举类型等占用多行时缩进一个制表符。

if、while、for、switch等语句的左花括号’{’,与圆括号语句在同一行,与’)’用一个空格隔开,不再另起一行。

空格:

双目运算符前后空一格;函数多个参数用逗号隔开后空一格

if、for、while、switch等基本语句中,关键词与左括号’(’间、右括号’)’与’{’间有一个空格。

图1.7

for□(p□=□p2;□p->d_parent□!

=□p;□p□=□p->d_parent)□{

if□(p->d_parent□==□p1)

return1;

}

二、kernel相关代码规

参照一通用规

部分的.h和.c文件规说明

三、glibc相关代码规

3.1头文件.h文件和.c文件规

3.1.1文件首部注释

与通用规1.2.1的差异在于:

模块注释的中间行不需每行前面有*号,且注释容的缩进为三个空格(距离行首)。

此代码库中,文件首部注释部分除了对各个文件简单说明外,其他如软件信息基本不变。

图3.1

/*□Copyright(C)1995,1997,1998,2000FreeSoftwareFoundation,

□□□Inc.

ThisfileispartoftheGNUCLibrary.

Contributedby

□□□UlrichDrepper,August1995.

□□□TheGNUCLibraryisfreesoftware;youcanredistributeit

□□□and/or

modifyitunderthetermsoftheGNULesserGeneral

□□□Public

LicenseaspublishedbytheFreeSoftwareFoundation;

□□□either

version2.1oftheLicense,or(atyouroption)any

□□□laterversion.

□□□TheGNUCLibraryisdistributedinthehopethatitwillbe

□□□useful,

butWITHOUTANYWARRANTY;withouteventheimplied

□□□warrantyof

MERCHANTABILITYorFITNESSFORAPARTICULAR

□□□PURPOSE.SeetheGNU

LesserGeneralPublicLicenseformore

□□□details.

□□□YoushouldhavereceivedacopyoftheGNULesserGeneral

□□□Public

LicensealongwiththeGNUCLibrary;ifnot,writeto

□□□theFree

SoftwareFoundation,Inc.,59TemplePlace,Suite

□□□330,Boston,MA

02111-1307USA.*/

3.1.2代码注释

(1)函数定义注释

函数定义注释与首部注释格式相同,此库中对函数定义的注释较少,注释项目可参考通用规1.2.2中

(1)所述。

注意:

此库中函数定义格式与通用格式有不同,将返回值类型单独列在了函数名前面行,如下图所示。

图3.2

(2)代码块及单语句注释

与通用规1.2.2中

(2)的风格一致,缩进不同处见下面的代码格式。

3.1.3代码格式

代码格式与通用规1.2.3中所不同的地方在于:

下一级代码相对于上一级代码的缩进是两个空格,if,while,for等语句的左花括号‘{’另起一行缩进,如上图中所示。

/*□Callkernelwithadditionaltwoargumentsthesyscall

□□□requires.*/

int

reboot(inthowto)

{

□□return;

}

if□(k_dev□!

=□dev)

□□{

□□□□__set_errno(EINVAL);

□□□□return-1;

□□}

四、bibautil库代码规

参照通用规

五、procps库代码规

procps源码本身有些地方的风格不一,新增和修改部分进行风格统一。

5.1头文件.h和.c文件规说明

5.1.1文件首部注释

文件首部注释部分与通用规1.2.1的主要差别在于每行注释容与行首星号*间只有一个空格。

5.1.2代码注释

(1)函数定义注释

此库中对函数定义的注释较少,风格不一,现对于新增代码的函数定义注释统一参考通用规1.2.2中

(1)所述。

注意:

此库中函数的所有‘{’都未单独一行开始,直接跟在语句后面。

如下图所示:

图5.1

staticintcompare_two_procs(constvoid*a,constvoid*b){

□□sort_node*tmp_list=sort_list;

□□while(tmp_list){

□□□□intresult;

□□□□result=(*tmp_list->sr)(*(constproc_t*const*)a,*(const

proc_t*const*)b);

□□□□if(result)return(tmp_list->reverse)?

-result:

result;

□□□□tmp_list=tmp_list->next;

□□}

□□return0;/*noconclusion*/

}

(2)代码块及单语句注释

新增代码统一规定与通用规1.2.2中

(2)的风格一致,缩进不同处见下面的代码格式。

(3)代码格式

代码格式与通用规1.2.3中所不同的地方在于:

下一级代码相对于上一级代码的缩进是两个空格,如上图中所示。

六、pam代码库规说明

pam代码库源码风格也不一致,新增或者修改的代码建议与修改处的源码风格保持一致;全新增加的代码参考下面规。

6.1头文件.h和.c文件规说明

6.1.1文件首部注释

参考通用规1.2.1,文件首部注释部分与通用规1.2.1的主要差别在于每行注释容与行首星号*间不是八个空格而是一个空格。

6.1.2代码注释

(1)函数定义注释

参考通用规1.2.2中

(1)函数定义注释,主要差别同样在于每行注释容与行首星号*间不是八个空格而是一个空格。

(2)代码块和单语句注释

参考通用规1.2.2中

(2),

(3)代码格式

参考通用规1.2.3,主要差别在于缩进大小不一定是一个制表符,与上下文保持一致,若无参考上下文则统一缩进四个空格。

七、audit-module代码库规说明

audit-module代码库中.c和.h文件在缩进方面采用缩进一个制表符的风格很统一,在注释容,空行与空格这类格式上可以参考通用规1.2。

Audit-module代码库中.l文件和.y文件函数定义注释以及代码块注释容和格式可以参考通用规1.2;.l文件中token标记对应的操作(即花括号的代码)应根据容调整对齐。

八、coreutils代码库规说明

参考三glibc相关代码规

九、xen代码库规说明

十、policycoreutils代码库规说明

参考一通用规

十一、acl代码库规说明

参考一通用规

文件首部注释与通用规1.2.1的差异在于:

模块注释的中间行不需每行前面有*号,且注释容的缩进为两个空格(距离行首)。

图11.1

/*

□□File:

parse.c

□□(LinuxAccessControlListManagement)

□□Copyright(C)1999,2000

□□AndreasGruenbacher,

□□Thisprogramisfreesoftware;youcanredistributeitand/or

□□modifyitunderthetermsoftheGNULesserGeneralPublic

□□LicenseaspublishedbytheFreeSoftwareFoundation;either

□□version2oftheLicense,or(atyouroption)anylater

□□version.

□□Thisprogramisdistributedinthehopethatitwillbeuseful,

□□butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof

□□MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe□□GNU

LesserGeneralPublicLicenseformoredetails.

□□YoushouldhavereceivedacopyoftheGNULesserGeneral

□□Public

Licensealongwiththislibrary;ifnot,writetothe

□□FreeSoftware

Foundation,Inc.,59TemplePlace-Suite330,

□□Boston,MA02111-1307,USA.

□□*/

另一个差异在于函数定义时的返回值类型位置,应该参照图3.2中返回值类型格式。

十二、audit代码库规说明

参考一通用规,差异之处在于:

文件首部注释应该将图1.2中两个空格变为一个空格,函数定义注释应将图1.3中注释行八个空格变为一个空格。

十三、openssh代码库规说明

参考一通用规,差异之处在于:

文件首部注释部分应将图1.2中两个空格变为一个空格,函数定义注释部分也将图1.3中注释行八个空格变为一个空格,函数返回值类型格式应参照图3.2中返回值类型格式

十四、shadow-utils代码库规说明

参考十二规说明

十五、smartcard代码库规说明

代码未修改

十六、epass2000代码库规说明

参考十二规说明

十七、zhongwei.linux代码库规说明

参考一通用规,差异之处在于:

文件首部注释应该将图1.2中两个空格变为一个空格,函数定义注释应将图1.3中注释行八个空格变为一个空格。

十八、yzw.anaconda代码库规说明

参考一通用规,差异之处在于:

缩进为四个空格。

有效代码库:

代码库所在目录:

/var/backup/serveroot/public-repo

其下四个子目录:

apps,kernel,policy,services

apps中有效代码库:

liping.openssh.git

liping.shadow-utils.git

liping.smartcard.git

liping.epass2000.git

suxingwang.biba-utils.git

zhangyanping.procps.git

liuyan.nfsark-policy.git

yongbo.coreutils.git

yongbo.policycoreutils.git

yongbo.acl.git

yzw.anaconda.git

kernel中有效代码库:

yongbo.xen.git

zhongwei.linux.git

merged.linux.git

注:

merged.linux.git由wushu.linux.gityongbo.linux.git合并而成

policy中有效代码库:

暂无

services中有效代码库:

liping.glibc.git

yongbo.audit.git

代码库具体到开发人员:

liping:

apps:

liping.openssh.git

liping.shadow-utils.git

liping.smartcard.git

liping.epass2000.git

services:

liping.glibc.git

注:

shadow里面主要是useradd\usermod\userdel,smartcard未作修改。

shiwei:

apps:

shiwei.pam.git

shiwei.audit-module.git

services:

yongbo:

apps:

yongbo.coreutils.git

yongbo.policycoreutils.git

yongbo.acl.git

services:

yongbo.audit.git

kernel:

yongbo.xen.git

suxingwang:

apps:

suxingwang.biba-utils.git

zhangyanping:

apps:

zhangyanping.procps.git

liuyan:

apps:

liuyan.nfsark-policy.git

zhongwei:

apps:

yzw.anaconda.git

kernel:

zhongwei.linux.git

wushu:

apps:

wushu.bibautils.git

wushu.initscripts.git

wushu.sysvinit.git

wushu.util-linux.git

kernel:

merged.linux.git

services:

wushu.cups.git

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

当前位置:首页 > 高等教育 > 艺术

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

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