29.11.2014 Views

MISRA-C-:2004 - 错误提示:发生了异常

MISRA-C-:2004 - 错误提示:发生了异常

MISRA-C-:2004 - 错误提示:发生了异常

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

code[6] = ‘\100’ ; /* set to 64, or implementation-defined */<br />

最 好 根 本 不 要 使 用 八 进 制 常 量 或 escape 序 列 , 并 且 要 静 态 检 查 它 们 是 否 出 现 。 整 数 常 量 0<br />

( 做 为 单 个 数 字 书 写 的 ) 严 格 说 来 是 八 进 制 常 量 , 然 而 在 此 规 则 下 它 也 是 允 许 的 。<br />

6.8 声 明 与 定 义<br />

规 则 8.1( 强 制 ):<br />

函 数 应 当 具 有 原 型 声 明 , 且 原 型 在 函 数 的 定 义 和 调 用 范 围 内 都 是 可 见<br />

的 。<br />

[ 未 定 义 22、23]<br />

原 型 的 使 用 使 得 编 译 器 能 够 检 查 函 数 定 义 和 调 用 的 完 整 性 。 如 果 没 有 原 型 , 就 不 会 迫 使<br />

编 译 器 检 查 出 函 数 调 用 当 中 的 一 定 错 误 ( 比 如 , 函 数 体 具 有 不 同 的 参 数 数 目 , 调 用 和 定 义 之<br />

间 参 数 类 型 的 不 匹 配 )。 事 实 证 明 , 函 数 接 口 是 相 当 多 问 题 的 肇 因 , 因 此 本 规 则 是 相 当 重 要 的 。<br />

对 外 部 函 数 来 说 , 我 们 建 议 采 用 如 下 方 法 , 在 头 文 件 中 声 明 函 数 ( 亦 即 给 出 其 原 型 ), 并<br />

在 所 有 需 要 该 函 数 原 型 的 代 码 文 件 中 包 含 这 个 头 文 件 ( 见 规 则 8.8)。<br />

为 具 有 内 部 链 接 的 函 数 给 出 其 原 型 也 是 良 好 的 编 程 实 践 。<br />

规 则 8.2( 强 制 ): 不 论 何 时 声 明 或 定 义 了 一 个 对 象 或 函 数 , 它 的 类 型 都 应 显 式 声 明 。<br />

extern x; /* Non-compliant – implicit int type */<br />

extern int16_t x ; /* Compliant – explicit type */<br />

const y ; /* Non-compliant – implicit int type */<br />

const int16_t y ; /* Compliant – explicit type */<br />

static foo (void) ; /* Non-compliant – implicit type */<br />

static int16_t foo (void) ; /* Compliant – explicit type */<br />

规 则 8.3( 强 制 ):<br />

函 数 的 每 个 参 数 类 型 在 声 明 和 定 义 中 必 须 是 等 同 的 , 函 数 的 返 回 类 型<br />

也 该 是 等 同 的 。<br />

[ 未 定 义 24;Koenig 59 – 62]<br />

参 数 与 返 回 值 的 类 型 在 原 型 和 定 义 中 必 须 匹 配 , 这 不 仅 要 求 等 同 的 基 本 类 型 , 也 要 求 包<br />

含 typedef 名 称 和 限 定 词 在 内 的 类 型 也 要 相 同 。<br />

规 则 8.4( 强 制 ): 如 果 对 象 或 函 数 被 声 明 了 多 次 , 那 么 它 们 的 类 型 应 该 是 兼 容 的 。<br />

[ 未 定 义 10]<br />

兼 容 类 型 的 定 义 是 冗 长 复 杂 的 ( 详 见 ISO 9899 :1990 [2], 节 6.1.2.6、6.5.2、6.5.3、6.5.4)。<br />

两 个 等 同 的 类 型 必 然 是 兼 容 的 , 而 两 个 兼 容 的 类 型 不 需 要 等 同 。 例 如 , 下 面 的 类 型 对 是 兼 容<br />

的 :<br />

signed int<br />

int<br />

char[5] char []<br />

unsigned short int unsigend short<br />

规 则 8.5( 强 制 ): 头 文 件 中 不 应 有 对 象 或 函 数 的 定 义 。<br />

头 文 件 应 该 用 于 声 明 对 象 、 函 数 、typedef 和 宏 , 而 不 应 该 包 含 或 生 成 占 据 存 储 空 间 的 对<br />

象 或 函 数 ( 或 它 们 的 片 断 ) 的 定 义 。 这 样 就 清 晰 地 划 分 了 只 有 C 文 件 才 包 含 可 执 行 的 源 代 码 ,<br />

而 头 文 件 只 能 包 含 声 明 。<br />

规 则 8.6( 强 制 ): 函 数 应 该 声 明 为 具 有 文 件 作 用 域 。<br />

[ 未 定 义 36]<br />

25

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!