保证程序品质的
C语言编程规约
株式会社esol embex
2007年10月31日
修改履历
版
日期
内容
确认
查阅
作成
2007/10/15
初版
2007/10/31
修正5处错误
目录
1. 首先 5
适用范围 5
适用范围之外 5
2. 编程风格 6
源文件 6
头文件 6
注释 8
命名 11
书写结构风格 13
3. 声明・定义 17
变量声明・定义 17
数组声明・定义 19
函数声明・定义 20
4. 类型 21
指针 21
运算・赋值 23
副作用 25
5. 语句 26
for ・while语句 26
if ・switch语句 27
6. 预处理 30
#if, #ifdef指令 30
宏 31
附录A 规则一览 32
首先
本书为esol embex社内研修所使用的C程序编程规约。
适用范围
本编程规约,适用于由C语言新规作成的程序。在程序发生变更的情况下,要符合原来程序规约。
适用范围之外
对于本编程规约适用范围内的程序的一部分或者全部,也规定了在规约的适用范围之外的处理方法。
例如,对于某些特定部分的代码,为了提高执行効率,有必要不按着规约进行编程,采用规约适用范围之外的处理方法有时会得到良好的效果。在这种情况下,使用在这里规定的处理顺序和方法,那些代码部分就会成为编程规约适用之外的对象。
规约适用范围之外的处理顺序
制作规约适用范围之外的理由书。理由书中记述了以下的项目,然后才能向下一阶段
前进。规则号,发生场所(文件名/行号),规则遵守的问题点,脱离规则的影响。
接受技术者的评审。⇒把评审结果追加到理由书中
受到工程担当者的认可。⇒在理由书中记载认可记录。
编程风格
源文件
规定了在源文件记述的内容和记述的顺序。
文件头注释
系统头的处理内容
用户作成头的处理内容
只在本文件内使用的#define宏
只在本文件内使用的#define函数宏
只在本文件内使用的typedef定义
只在本文件内使用的enum tag定义
只在本文件内使用的struct/union tag定义
在文件内共同使用的static变量定义
static函数声明
函数定义
※对于②,③而言要注意不要记述不需要的信息。
※对④~⑧尽可能不要进行记述。
头文件
规定了在头文件中记述的内容和记述的顺序。
文件头注释
系统头的处理内容
用户作成头的处理内容
#define宏
#define函数宏
typedef定义(对int或char基本类型的定义)
enum tag定义(与typedef同时进行)
struct/union tag定义(与typedef同时进行)
extern变量定义
函数声明
【注意事项】
在头文件中,记述了在多个源文件中共同使用的宏定义,构造体・共用体・枚举型的tag声明,typedef声明,外部变量声明,函数原型声明。因为一旦由各程序单独进行记述的话,就会有变更疏漏的危险、因此把共同使用的东西放到头文件中。
在头文件中,不要对外部变量或函数进行定义。【MISRA 】
<不适合例>
--- ---
int x; /* 外部变量定义*/
int func(void) /* 函数定义*/
{
…
}
<适合例>
--- ---
extern int x; /* 外部变量声明*/
int func(void); /* 函数声明*/
'--- ---
#include ""
int x; /* 外部变量定义*/
int func(void) /* 函数定义*/
{
…
}
【注意事项】
头文件,有可能被多个源文件所包括,因此在该头文件中一旦对外部变量或函数进行定义的话(相当于在每个文件中都对同一个函数和变量进行了定义),那么编译后生成的目标代码就会有变得很大的危险。在头文件中只要记述基本的声明和类型的定义等。
在头文件中,不要使用字符',\,",/*,: 。
<不适合例>
#include "inc\" /* NG */
<适合例>
#include "inc/" /* OK */
【注意事项】
在语言规格中,没有定义使用这些字符情况下的动作。即,没有规定会产生什么动作,没有移植性。
- 字符',\,",或者/* 在< >之间的字符串中出现的情况
嵌入式C语言编程规范 来自淘豆网m.daumloan.com转载请标明出处.