C语言开发注意事项

C语言开发过程中有很多需要注意的地方,以下内容摘自《华为C语言编程规范总则》


2-2:文件头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、

功能、修改日志等。
示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包
含在内。
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
- 4 -
/*****************************************************************************
Copyright: 1988-1999, Huawei Tech. Co., Ltd.
File name: 文件名
Description: 用于详细说明此程序文件完成的主要功能,与其他模块或函数的接口,输出
值、取值范围、含义及参数间的控制、顺序、独立或依赖等关系
Author: 作者
Version: 版本
Date: 完成日期
History: 修 改 历 史 记 录 列 表 , 每 条 修 改 记 录 应 包 括 修 改 日 期 、 修 改
者及修改内容简述。

*****************************************************************************/


2-3:函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用
关系(函数、表)等。
示例:下面这段函数的注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在
内。
/*************************************************
 Function: // 函数名称
 Description: // 函数功能、性能等的描述
 Calls: // 被本函数调用的函数清单
 Called By: // 调用本函数的函数清单
 Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)
 Table Updated: // 被修改的表(此项仅对于牵扯到数据库操作的程序)
 Input: // 输入参数说明,包括每个参数的作
 // 用、取值说明及参数间关系。
 Output: // 对输出参数的说明。
 Return: // 函数返回值的说明
 Others: // 其它说明
*************************************************/


2-9:全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及
存取时注意事项等的说明。
示例:
/* 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-13:在代码的功能、意图层次上进行注释,提供有用、额外的信息。
说明:注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者
理解代码,防止没必要的重复注释信息。
示例:如下注释意义不大。
/* if receive_flag is TRUE */
if (receive_flag)
而如下的注释则给出了额外有用的信息。
/* if mtp receive a message from links */
if (receive_flag) 




3-8:用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。
说明:下面是一些在软件中常用的反义词组。
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 ); 


6-5:在同一项目组应明确规定对接口函数参数的合法性检查应由函数的调用者负责还是由
接口函数本身负责,缺省是由函数调用者负责。
说明:对于模块间接口函数的参数的合法性检查这一问题,往往有两个极端现象,即:要么
是调用者和被调用者对参数均不作合法性检查,结果就遗漏了合法性检查这一必要的处理过
程,造成问题隐患;要么就是调用者和被调用者均对参数进行合法性检查,这种情况虽不会
造成问题,但产生了冗余代码,降低了效率。


8-15:要时刻注意易混淆的操作符。当编完程序后,应从头至尾检查一遍这些操作符,以防
止拼写错误。
说明:形式相近的操作符最容易引起误用,如 C/C++中的“=”与“==”、“|”与“||”、“&”
与“&&”等,若拼写错了,编译器不一定能够检查出来。
示例:如把“&”写成“&&”,或反之。


9-5:编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码
丢失。


9-9:使用代码检查工具(如 C 语言用 PC-Lint)对源程序检查。
9-10:使用软件工具(如 LogiSCOPE)进行代码审查。 


11-1:用宏定义表达式时,要使用完备的括号。


11-3:使用宏时,不允许参数发生变化。
示例:如下用法可能导致错误。
#define SQUARE( a ) ((a) * (a))
int a = 5;
int b;
b = SQUARE( a++ ); // 结果:a = 7,即执行了两次增 1。
正确的用法是:
b = SQUARE( a );
a++; // 结果:a = 6,即只执行了一次增 1。

猜你喜欢

转载自blog.csdn.net/zfs2008zfs/article/details/51941207
今日推荐