MISRA C指导指南解读系列8(MISRA C规则87-100)
2009-05-05 13:41
316 查看
2.1. 预处理
87.文件中#include语句前面只能是其它的预处理语句或注释(R)例如:
static int a;
#include <stdio.h> /*与规则87冲突*/
……
88.非标准字符不能出现在#include语句的头文件名称中(R)
不允许在<>之间出现',/,",/*等字符,并且在""中也不能出现',/,/*等符号。
89.#include指示的后面应该是<filename>或”filename”(R)
90.C宏定义的符号只能表示常数,类函数的宏,类型限制,和存储类标示(R)
例如:
/* 以下是可以的 */
#define PI 3.14159f /* 常数 */
#define PLUS2(X) ((X) + 2) /* 类函数宏 */
#define STOR extern /* 存储类型标示 */
/* 一下是不允许的 */
#define SI_32 long /* 使用typedef替代该定义 */
#define STARTIF if( /* 非常不好 */
91.宏不能在块中进行#define和#undef定义(R)
#define PI 3.1415926f /*OK*/
int myfunc(void) {
#define EXP 2.3f /* 与规则冲突 */
}
92.#undef不应该被使用(A)
93.函数的使用应该优先于类函数的宏(A)
虽然类函数的宏比函数更高效,但是健壮性较差,函数会进行参数检查。
94.没有使用所有参数的情况下不能使用类函数宏(R)
95.用于类函数宏的参数不能包含类似预处理指示符的标示(R)
这主要是防止不可预测的参数值,例如空置
例如
#define NDATA() ()
#define MAX(a, b) ((a) > (b) ? (a) : (b))
void myfunc()
{
int a, b;
a = MAX(b, NDATA()); /* 与规则95冲突 */
}
96.在宏定义的类函数宏中,所有的实例化参数都要使用括号(R)
例如
#define MINOR(x) (x-1) /* 与规则96冲突 */
97.预处理标示中使用的标识符应在使用前定义(A)
#if MYMACRO < 0 /*如果MYMACRO没有定义,则默认为0*/
98.在一个宏定义中,最多可以出现一个# 或 ##预处理操作符(R)
/* OK */
#define TEST(A,B) A # B
/* OK */
#define TEST2(A,B) A ## B
/* 与规则98冲突 */
#define TEST3(A,B,C) A # B # C
/* 与规则98冲突 */
#define TEST4(A,B,C) A ## B # C
/* 与规则98冲突 */
#define TEST5(A,B,C) A ## B ## C
99.所有使用的#pragma指示符应该文档化并进行解释(R)
100.所有定义的预处理操作应该采用两种标准格式中的一种(R)
在标准C中,#define identifier 和 #define (identifier)是被定义的两种格式。
## 是连接符号,连接两个字符串
#是把名字代替成参数中的字符串
相关文章推荐
- MISRA C指导指南解读系列10(MISRA C规则114-127)
- MISRA C指导指南解读系列2(MISRA 规则 1- 10)
- MISRA C指导指南解读系列3(MISRA C规则11-19)
- MISRA C指导指南解读系列4(MISRA C规则20-32)
- MISRA C指导指南解读系列9(MISRA C规则101-113)
- MISRA C指导指南解读系列6(MISRA C规则46-67)
- MISRA C指导指南解读系列5(MISRA C规则33-45)
- MISRA C指导指南解读系列7(MISRA C规则68-86)
- MISRA C指导指南解读系列1(MISRA C是什么)
- 深入Atlas系列:客户端代码编写规则分析与指南
- Google C++Style Guide【C++编程风格指南解读】——Windows代码规则
- Google C++Style Guide【C++编程风格指南解读】——规则的根本目标
- 深入Atlas系列:客户端代码编写规则分析与指南
- 微软等面试100题系列 29题解答 望各位同行指导
- Yii框架官方指南系列9——基础知识:视图
- Yii框架官方指南系列17——使用表单:创建模型
- Yii框架官方指南系列25——使用数据库:Active Record
- Yii框架官方指南系列33——扩展Yii:概览
- Yii框架官方指南系列41——专题:自动代码生成
- Yii框架官方指南系列50——专题:控制台应用