⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 huawei.txt

📁 看看人家是如何编写程序的
💻 TXT
📖 第 1 页 / 共 5 页
字号:

/* active statistic task number */ 


#define MAX_ACT_TASK_NUMBER 1000 



 

#define MAX_ACT_TASK_NUMBER 1000 /* active statistic task number */ 


2-10:数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方。 
示例:可按如下形式说明枚举/数据/联合结构。 


/* sccp interface with sccp user primitive message name */ 


enum  SCCP_USER_PRIMITIVE 


{ 


    N_UNITDATA_IND, /* sccp notify sccp user unit data come */ 


    N_NOTICE_IND,   /* sccp notify user the No.7 network can not */ 


                    /* transmission this message */ 


    N_UNITDATA_REQ, /* sccp user's unit data transmission request*/ 


}; 


2-11:全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。 
示例: 


/* The ErrorCode when SCCP translate */ 


/* Global Title failure, as follows */      // 变量作用、含义 


/* 0 - SUCCESS   1 - GT Table error */ 


/* 2 - GT error  Others - no use  */       // 变量取值范围 


/* only  function  SCCPTranslate() in */ 


/* this modual can modify it,  and  other */ 


/* module can visit it through call */ 


/* the  function GetGTTransErrorCode() */    // 使用方法 


BYTE g_GTTranErrorCode;  


2-12:注释与所描述内容进行同样的缩排。 
说明:可使程序排版整齐,并方便注释的阅读与理解。 


示例:如下例子,排版不整齐,阅读稍感不方便。 


void example_fun( void ) 


{ 


/* code one comments */ 


    CodeBlock One 



 

        /* code two comments */ 


    CodeBlock Two 


} 



 

应改为如下布局。 


void example_fun( void ) 


{ 


    /* code one comments */ 


    CodeBlock One 



 

    /* code two comments */ 


    CodeBlock Two 


} 


2-13:将注释与其上面的代码用空行隔开。 
示例:如下例子,显得代码过于紧凑。 


/* code one comments */ 


program code one 


/* code two comments */ 


program code two 



 

应如下书写 


/* code one comments */ 


program code one 



 

/* code two comments */ 


program code two 


2-14:对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。 
说明:这些语句往往是程序实现某一特定功能的关键,对于维护人员来说,良好的注释帮助更好的理解程序,有时甚至优于看设计文档。 


2-15:对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。 
说明:这样比较清楚程序编写者的意图,有效防止无故遗漏break语句。 


示例(注意斜体加粗部分): 


case CMD_UP:   


    ProcessUp(); 


    break; 



 

case CMD_DOWN: 


    ProcessDown(); 


    break; 



 

case CMD_FWD:  


    ProcessFwd(); 


    


if (...) 


{ 


    ... 


    break; 


} 


else 


{ 


    ProcessCFW_B();   // now jump into case CMD_A 


} 



 

case CMD_A:    


    ProcessA();    


    break; 



 

case CMD_B:    


    ProcessB();    


    break; 



 

case CMD_C:    


    ProcessC();    


     break; 



 

case CMD_D:    


    ProcessD();    


    break; 


... 


2-1:避免在一行代码或表达式的中间插入注释。 

说明:除非必要,不应在代码或表达中间插入注释,否则容易使代码可理解性变差。 


2-2:通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的。 

说明:清晰准确的函数、变量等的命名,可增加代码可读性,并减少不必要的注释。 


2-3:在代码的功能、意图层次上进行注释,提供有用、额外的信息。 

说明:注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者理解代码,防止没必要的重复注释信息。 


示例:如下注释意义不大。 


/* if receive_flag is TRUE */ 


if (receive_flag) 



 

而如下的注释则给出了额外有用的信息。 


/* if mtp receive a message from links */ 


if (receive_flag) 


2-4:在程序块的结束行右方加注释标记,以表明某程序块的结束。 

说明:当代码段较长,特别是多重嵌套时,这样做可以使代码更清晰,更便于阅读。 


示例:参见如下例子。 


if (...) 


{ 


    // program code 



 

    while (index < MAX_INDEX) 


    { 


        // program code 


    } /* end of while (index < MAX_INDEX) */ // 指明该条while语句结束 


} /* end of  if (...)*/ // 指明是哪条if语句结束 


2-5:注释格式尽量统一,建议使用“/* …… */”。 

2-6:注释应考虑程序易读及外观排版的因素,使用的语言若是中、英兼有的,建议多使用中文,除非能用非常流利准确的英文表达。 

说明:注释语言不统一,影响程序易读性和外观排版,出于对维护人员的考虑,建议使用中文。 




3 标识符命名 

3-1:标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。 
说明:较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的头几个字母形成缩写;一些单词有大家公认的缩写。 


示例:如下单词的缩写能够被大家基本认可。 


temp 可缩写为  tmp  ; 


flag 可缩写为  flg  ; 


statistic 可缩写为  stat ; 


increment 可缩写为  inc  ; 


message 可缩写为  msg  ; 


3-2:命名中若使用特殊约定或缩写,则要有注释说明。 
说明:应该在源文件的开始之处,对文件中所使用的缩写或约定,特别是特殊的缩写,进行必要的注释说明。 


3-3:自己特有的命名风格,要自始至终保持一致,不可来回变化。 
说明:个人的命名风格,在符合所在项目组或产品组的命名规则的前提下,才可使用。(即命名规则中没有规定到的地方才可有个人命名风格)。 


3-4:对于变量命名,禁止取单个字符(如i、j、k...),建议除了要有具体含义外,还能表明其变量类型、数据类型等,但i、j、k作局部循环变量是允许的。 
说明:变量,尤其是局部变量,如果用单个字符表示,很容易敲错(如i写成j),而编译时又检查不出来,有可能为了这个小小的错误而花费大量的查错时间。 


示例:下面所示的局部变量名的定义方法可以借鉴。 


int liv_Width 


其变量名解释如下: 


       l      局部变量(Local)  (其它:g    全局变量(Global)...) 


       i      数据类型(Interger) 


       v      变量(Variable)   (其它:c    常量(Const)...) 


       Width  变量含义 


这样可以防止局部变量与全局变量重名。 


3-5:命名规范必须与所使用的系统风格保持一致,并在同一项目中统一,比如采用UNIX的全小写加下划线的风格或大小写混排的方式,不要使用大小写与下划线混排的方式,用作特殊标识如标识成员变量或全局变量的m_和g_,其后加上大小写混排的方式是允许的。 
示例: Add_User不允许,add_user、AddUser、m_AddUser允许。 


3-1:除非必要,不要用数字或较奇怪的字符来定义标识符。 

示例:如下命名,使人产生疑惑。 


#define _EXAMPLE_0_TEST_ 


#define _EXAMPLE_1_TEST_ 


void set_sls00( BYTE sls ); 



 

应改为有意义的单词命名 


#define _EXAMPLE_UNIT_TEST_ 


#define _EXAMPLE_ASSERT_TEST_ 


void set_udt_msg_sls( BYTE sls ); 


3-2:在同一软件产品内,应规划好接口部分标识符(变量、结构、函数及常量)的命名,防止编译、链接时产生冲突。 

说明:对接口部分的标识符应该有更严格限制,防止冲突。如可规定接口部分的变量与常量之前加上“模块”标识等。 


3-3:用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。 

说明:下面是一些在软件中常用的反义词组。 


add / remove       begin / end        create / destroy 


insert / delete    first / last       get / release 


increment / decrement                 put / get 


add / delete       lock / unlock      open / close 


min / max          old / new          start / stop 


next / previous    source / target    show / hide 


send / receive     source / destination 


cut / paste        up / down 


示例: 


int  min_sum; 


int  max_sum; 


int  add_user( BYTE *user_name ); 


int  delete_user( BYTE *user_name ); 


3-4:除了编译开关/头文件等特殊应用,应避免使用_EXAMPLE_TEST_之类以下划线开始和结尾的定义。 

 


4 可读性 

4-1:注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。 

说明:防止阅读程序时产生误解,防止因默认的优先级与设计思想不符而导致程序出错。 


示例:下列语句中的表达式 


word = (high << 8) | low     (1) 


if ((a | b) && (a & c))      (2) 


if ((a | b) < (c & d))       (3) 


如果书写为 


high << 8 | low 


a | b && a & c 


a | b < c & d 


由于 


high << 8 | low = ( high << 8) | low, 


a | b && a & c = (a | b) && (a & c), 


(1)(2)不会出错,但语句不易理解; 


a | b < c & d = a | (b < c) & d,(3)造成了判断条件出错。 


4-2:避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的枚举或宏来代替。 
示例:如下的程序可读性差。 


if (Trunk[index].trunk_state == 0) 


{ 


    Trunk[index].trunk_state = 1; 


    ...  // program code 


} 



 

应改为如下形式。 


#define TRUNK_IDLE 0 


#define TRUNK_BUSY 1 



 

if (Trunk[index].trunk_state == TRUNK_IDLE) 


{ 


    Trunk[index].trunk_state = TRUNK_BUSY; 


    ...  // program code 


} 


4-1:源程序中关系较为紧密的代码应尽可能相邻。 

说明:便于程序阅读和查找。 


示例:以下代码布局不太合理。 


rect.length = 10; 


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -