C语言程序开发规范
目 录
1.引言
1.1. 目的
使用本规范是为了支持下述软件品质:
无错误、有失效保障、可靠
一个软件产品,如果严格符合它的规范就是正确的,如果在异常环境下仍然能够工作就是健壮的(robust)。无错误、有失效保障、可靠就是指一个软件产品既正确又健壮。
可维护
一个软件产品,如果它可以随着规范的改变而方便地进行修正就是可扩展的;如果一个熟悉该软件规程的新程序员能够轻松地理解它的实现就是可读的;如果能够整个或部分地被一个新的应用所重用就是可重用的。可维护就是指一个软件产品可扩展、可读并且可重用。
可移植
一个软件产品,如果可以方便地转移到一个不同的硬件或软件环境中应用,那么它是可移植的。
可配置
一个软件产品,如果能够轻松地选择源代码的正确版本和其它联编一个软件产品所需的部件,那么它是可配置的。
可验证
一个软件产品,如果能够在验证阶段轻松地准备测试数据和检测故障的程序,那么它就是可
验证的。
易调试
一个软件产品,如果能够轻松地从故障上溯查到错误所在,那么它是容易调试的。
1.2. 一致性
凡所有开发的C软件都必须遵循本文档的要求,第三方软件可以有例外。其中,规则必须遵守,而建议则希望被遵守,如不能遵守,其原因必须作书面记载。所有对规则或建议的违背都必须有书面记载。
1.3. 术语
标识符(identifier):指C中的一个变量、常量、函数或类型。在本文档中它与“名称”同义。
定义(define):变量或常量的定义是指编译器为其分配的内存。函数的定义是指函数体的实现(也是为代码分配内存)。
声明(declare):指一些实体对编译器的声明所在的位置,如函数原型、类型(由typedef定义)、变量和常量。声明不分配内存。
宏(macro):指由#define语句定义的代替一个文本串的名字。当该名字在源程序中出现时,预处理器用对应文本串代替它。
固有数据类型(或预定义或基本数据类型):由语言本身定义的数据类型,如int。
用户定义数据类型:编程人员用struct、union、enum或typedef定义的数据类型。
范围:标识符的范围是指其可见的环境。环境在这里指可以使用该标识符的函数或程序块。
全局:使用范围没有限制。
文件级局部:使用范围局限在一个文件中。
函数级局部:使用范围局限在一个函数中。
2. 文件目录
【建议2-1-1】每个模块的代码(包括头文件)放在以“系统+模块”方式命名的目录下。
【建议2-1-2】文件的命名使用“系统+模块(+功能)”的方式命名。
例:RNCc语言编译器怎么用文件格式提交作业系统RANAP模块的C语言代码应该为RNC_RANAP.C 和RNC_RANAP.H,如
果程序太大仍需分为不同的文件,则按功能区分,比如:RNC_RANAP_DISPATCH.C 。
【规则2-1-2】实现同一功能的不同函数应在同一文件内。
【规则2-1-3】在每个子目录内要编写README文件对文件及子目录的组织结构作细致的描述。
README文件模板见附录H
3. 文件结构
C++/C程序的头文件以“.h”为后缀,C程序的定义文件以“.c”为后缀。
3.1. 版权和版本的声明
版权和版本的声明位于头文件和定义文件的开头(参见示例3-1),主要内容有:
(1)版权信息。
(2)文件名,作者/修改者,完成日期。
(3)最终版本号(必须跟最新修改记录的版本号相同),实现目的。
(4)修改记录。
/*************************************************************************/
/* XXXXXXXXXXXXXX有限公司 版权所有 */
/*************************************************************************/
/* @@BEGAIN_INTERNAL_LEGAL@@ */
/* */
/* Copyright(C) Description */
/* ZZZZZZZZZ Science & Technology Development Co.,Ltd. Beijing, China */
/* Unpublished work-rights reserved under the China Copyright Act. */
/* Use,duplication, or disclosure by the government is subject to */
/* restrictions set forth in the CDTT commercial license agreement. */
/* */
/* @@END_INTERNAL_LEGAL@@ */
/*************************************************************************/
/* 程序文件名:xxxx.c或者xxxx.h */
/* Filename :xxxx.c或者xxxx.h */
/* 作者 : */
/* Author : */
/* 日期 :MM/DD/YYYY */
/* Date :MM/DD/YYYY */
/* 当前版本 :1.0 */
/* Version:1.0 */
/* 实现目的 : */
/* Purpose : */
/*************************************************************************/
/* 修改记录 : */
/* 序号 , MM/DD/YYYY,版本,修改者,修改内容(最近的修改记录在最上面) */
/* Modi Report: */
/* Index,Date,Version,Author, content */
/*************************************************************************/
示例3-1 版权和版本的声明
3.2. 头文件的结构
头文件由三部分内容组成:
(1)头文件开头处的版权和版本声明(参见示例3-1)。
(2)预处理块。
(3)函数和结构声明等。
版本和版权声明
#ifndef _文件名_H
#define _文件名_H
其它头文件包含声明
常数和类型定义
宏定义
变量定义
函数声明
#endif
示例3-2 头文件结构
【规则3-2-1】为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。
【规则3-2-2】用 #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。
【规则3-2-3】用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。
【建议3-2-4】头文件中只存放“声明”而不存放“定义”
3.3. 源文件的结构
源文件有三部分内容:
(1)定义文件开头处的版权和版本声明(参见示例3-1)。
(2)对一些头文件的引用。
(3)程序的实现体(包括数据和代码)。
版权和版本声明
#define SS_SWITCH /* 子系统切换开关 */
#include <stdio.h>( 或者<stdlib.h>) /* 操作系统标准头文件 */
#include <xxxxx.h> /* 其它头文件 */
#include “yyyyy.h” /* 用户头文件 */
#ifdef SS_SWITCH /* 头文件切换 */
#include <zzzzz.h>
#endif
局部常数和类型定义
局部宏定义
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论