C语言常用规则
一、程序风格:     
    1、严格采用阶梯层次组织程序代码:     
    各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格,括号位于下一行。
    要求相匹配的大括号在同一列,对继行则要求再缩进4格。例如:     
    2、提示信息字符串的位置     
    在程序中需要给出的提示字符串,为了支持多种语言的开发,除了一些给调试用的临时信息外,其他所有的提示信息必须定义在资源中。     
    3、对变量的定义,尽量位于函数的开始位置。 
这样的目的是为了检查的方便,以后自己看或检查和别人看会方便很多,具体的资料还可以参考林锐写的关于C语言的一个文章!   
二、命名规则:     
    1、变量名的命名规则     
    ①、变量的命名规则要求用“匈牙利法则”。即开头字母用变量的类型,其余部分用变量的英
文意思或其英文意思的缩写,尽量避免用中文的拼音,要求单词的第一个字母应大写。     
    即:    变量名=变量类型+变量的英文意思(或缩写)     
    对非通用的变量,在定义时加入注释说明,变量定义尽量可能放在函数的开始处。     
    见下表:     
   
变量类型
前缀
实例
备注
位域
bit
bitRXEN
寄存器控制接收使能的位
Bool
b
bTurnOn
 
Unsigned Char
uc
ucError
 
Char
c
cName
 
Unsigned Short
w
wMsg
 
Short
n
nCnt
 
Unsigned Int
u
uiLen
 
Int
i
iVal
 
Unsigned Long
ul
ulMaxTh
 
Long
l
LOffset
 
Long Int
li
liCount
 
Long Long
ll
llSum
 
Float
f
fAngle
 
Double
d
dRadius
 
Enum
e
eType
 
一级指针
p_
p_iVal
 
二级指针
pp_
pp_iVal
 
一维数组
a_
a_chDispName[]
 
二维数组
aa_
aa_chPrtName[][]
 
函数
fn
void fnProc(void)
申明函数类型,该函数形参和返回值均为void
函数指针
pfn
pfnFlashWrite
保存函数入口地址的指针变量
回调函数指针
lpfn
lpfnAbort
系统终止时调用该函数
结构体
st
stTimeNode
“时间节点”的结构体
局部变量
l_
l_iCount
仅供本例程调用的变量
静态变量
s_
s_pQData
仅供本模块调用的“队列缓冲区”的指针
全局变量
g_
g_pSemBtn
供多个模块调用的 “按钮信号量”的指针
模块中函数命名规则:
模块名_ + 函数名(动名结构),如:
tmr_GetCurTime()    // 时钟模块中,获取当前时间的函数
sport_TxData()    // SPORT驱动模块中,发送数据的函数

   
    对未给出的变量类型要求提出并给出命名建议给技术委员会。     
   
    ②、指针变量命名的基本原则为:     
    对一重指针变量的基本原则为:     
    “p”+变量类型前缀+命名     
    如一个float*型应该表示为pfStat     
    对多重指针变量的基本规则为:     
    二重指针:    “pp”+变量类型前缀+命名     
    三重指针:    “ppp”+变量类型前缀+命名     
    ......     
    ③、全局变量用g_开头,如一个全局的长型变量定义为g_lFailCount,即:变量名=g_+变量类型+变量的英文意思(或缩写)     
    ④、静态变量用s_开头,如一个静态的指针变量定义为s_plPerv_Inst,即:    变量名=s_+变量类型+变量的英文意思(或缩写)     
    ⑤、成员变量用m_开头,如一个长型成员变量定义为m_lCount;即:变量名=m_+变量类型+变量的英文意思(或缩写)     
    ⑥、对枚举类型(enum)中的变量,要求用枚举变量或其缩写做前缀。并且要求用大写。     
    如:enum    cmEMDAYS     
    {     
    EMDAYS_MONDAY;     
    EMDAYS_TUESDAY;     
    ……     
enum c++    };     
    ⑦、对struct、union、class变量的命名要求定义的类型用大写。并要加上前缀,其内部变量的命名规则与变量命名规则一致。     
    结构一般用S开头     
    如:struct    ScmNPoint     
    {     
    int    nX;//点的X位置     
    int    nY;    //点的Y位置     
    };     
    联合体一般用U开头     
    如:    union    UcmLPoint     
    {     
    long    lX;     
    long    lY;     
    }     
    类一般用C开头     
    如:     
    class    CcmFPoint     
    {     
    public:     
    float    fPoint;     
    };     
    对一般的结构应该定义为类模板,为以后的扩展性考虑     
    如:     
    template     
    class    CcmTVector3d     
    {     
    public:     
    TYPE    x,y,z;     
    };     
    ⑧、对常量(包括错误的编码)命名,要求常量名用大写,常量名用英文表达其意思。     
    如:#define    CM_FILE_NOT_FOUND    CMMAKEHR(0X20B)    其中CM表示类别。     
    ⑨、对const    的变量要求在变量的命名规则前加入c_,即:c_+变量命名规则;例如:     
    const    char*    c_szFileName;     
    2、    函数的命名规范:     
    函数的命名应该尽量用英文表达出函数完成的功能。遵循动宾结构的命名法则,函数名中动词在前,并在命名前加入函数的前缀,函数名的长度不得少于8个字母。     
    例如:     
    long    cmGetDeviceCount(……);     
    3、函数参数规范:     
    ①、    参数名称的命名参照变量命名规范。     
    ②、    为了提高程序的运行效率,减少参数占用的堆栈,传递大结构的参数,一律采用指针或引用方式传递。     
    ③、    为了便于其他程序员识别某个指针参数是入口参数还是出口参数,同时便于编译器检查错误,应该在入口参数前加入const标志。如:     
    ……cmCopyString(const    char    *    c_szSource,    char    *    szDest)     
    4、引出函数规范:     
    对于从动态库引出作为二次开发函数公开的函数,为了能与其他函数以及Windows的函数
区分,采用类别前缀+基本命名规则的方法命名。例如:在对动态库中引出的一个图象编辑的函数定义为    imgFunctionname(其中img为image缩写)。     
    现给出三种库的命名前缀:     
    ①、    对通用函数库,采用cm为前缀。     
    ②、    对三维函数库,采用vr为前缀。     
    ③、    对图象函数库,采用img为前缀。     
    对宏定义,结果代码用同样的前缀。     
    5、文件名(包括动态库、组件、控件、工程文件等)的命名规范:     
    文件名的命名要求表达出文件的内容,要求文件名的长度不得少于5个字母,严禁使用象file1,myfile之类的文件名。     

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。