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.

[IEC 61508 Part 3]<br />

本 规 则 的 对 象 是 产 品 代 码 中 的 任 意 库 , 因 此 这 些 库 可 能 包 含 编 译 器 提 供 的 标 准 库 、 其 他<br />

第 三 方 的 库 或 者 实 验 室 中 自 己 开 发 的 库 。 这 是 由 IEC 61508 Part 3 建 议 的 。<br />

6.4 字 符 集<br />

规 则 4.1( 强 制 ): 只 能 使 用 ISO C 标 准 中 定 义 的 escape 序 列 。<br />

参 见 5.2.2 节 中 关 于 有 效 escape 序 列 的 ISO 标 准 。<br />

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

不 能 使 用 三 字 母 词 (trigraphs)。<br />

[ 未 定 义 11; 实 现 11]<br />

三 字 母 词 由 2 个 问 号 序 列 后 跟 1 个 确 定 字 符 组 成 ( 如 ,??- 代 表 “~”( 非 ) 符 号 , 而 ??)<br />

代 表 “]” 符 号 )。 它 们 可 能 会 对 2 个 问 号 标 记 的 其 他 使 用 造 成 意 外 的 混 淆 , 例 如 字 符 串<br />

“(Date should be in the form ??-??-??)”<br />

将 不 会 表 现 为 预 期 的 那 样 , 实 际 上 它 被 编 译 器 解 释 为<br />

“(Date should be in the form ~~)”<br />

6.5 标 识 符<br />

规 则 5.1( 强 制 ): 标 识 符 ( 内 部 的 和 外 部 的 ) 的 有 效 字 符 不 能 多 于 31。<br />

[ 未 定 义 7; 实 现 5、6]<br />

ISO 标 准 要 求 在 内 部 标 识 符 之 间 前 31 个 字 符 必 须 是 不 同 的 以 保 证 可 移 植 性 。 即 使 编 译 器<br />

支 持 , 也 不 能 超 出 这 个 限 制 。<br />

ISO 标 准 要 求 外 部 标 识 符 之 间 前 6 个 字 符 必 须 是 不 同 的 ( 忽 略 大 小 写 ) 以 保 证 最 佳 的 可 移<br />

植 性 。 然 而 这 条 限 制 相 当 严 格 并 被 认 为 不 是 必 须 的 。 本 规 则 的 意 图 是 为 了 在 一 定 程 度 上 放 宽<br />

ISO 标 准 的 要 求 以 适 应 当 今 的 环 境 , 但 应 当 确 保 31 个 字 符 / 大 小 写 的 有 效 性 是 可 以 由 实 现 所 支<br />

持 的 。<br />

使 用 标 识 符 名 称 要 注 意 的 一 个 相 关 问 题 是 发 生 在 名 称 之 间 只 有 一 个 字 符 或 少 数 字 符 不 同<br />

的 情 况 , 特 别 是 名 称 比 较 长 时 , 当 名 称 间 的 区 别 很 容 易 被 误 读 时 问 题 就 比 较 显 著 , 比 如 1( 数<br />

字 1) 和 l(L 的 小 写 )、0 和 O、2 和 Z、5 和 S, 或 者 n 和 h。 建 议 名 称 间 的 区 别 要 显 而 易 见 。<br />

在 这 问 题 上 的 特 定 方 针 可 以 放 在 风 格 指 南 中 ( 见 4.2.2 节 )。<br />

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

具 有 内 部 作 用 域 的 标 识 符 不 应 使 用 与 具 有 外 部 作 用 域 的 标 识 符 相 同 的<br />

名 称 , 这 会 隐 藏 了 外 部 标 识 符 。<br />

外 部 作 用 域 和 内 部 作 用 域 的 定 义 如 下 。 文 件 范 围 内 的 标 识 符 可 以 看 做 是 具 有 最 外 部<br />

(outermost) 的 作 用 域 ; 块 范 围 内 的 标 识 符 看 做 是 具 有 更 内 部 (more inner) 的 作 用 域 ; 连 续<br />

嵌 套 的 块 , 其 作 用 域 更 深 入 。 本 规 则 只 是 不 允 许 一 个 第 二 深 层 (second inner) 的 定 义 隐 藏 其<br />

外 层 的 定 义 , 如 果 第 二 个 定 义 没 有 隐 藏 第 一 个 定 义 , 那 么 就 不 算 违 反 本 规 则 。<br />

在 嵌 套 的 范 围 中 , 使 用 相 同 名 称 的 标 识 符 隐 藏 其 他 标 识 符 会 使 得 代 码 非 常 混 乱 。 例 如 :<br />

int16_t i;<br />

{<br />

int16_t i; /* This is a different variable */<br />

/* This is not compliant */<br />

i = 3; /* It could be confusing as to which I this refers */<br />

}<br />

21

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

Saved successfully!

Ooh no, something went wrong!