29.11.2014 Views

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

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

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

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

• 它 显 著 削 弱 了 代 码 的 可 读 性<br />

• 它 为 语 句 引 入 了 其 他 的 副 作 用 , 可 能 存 在 未 定 义 的 行 为<br />

把 这 些 操 作 同 其 他 算 术 操 作 隔 离 开 是 比 较 安 全 的 。<br />

例 如 , 下 面 的 语 句 是 不 适 合 的 :<br />

u8a = ++u8b + u8c--; /* Not compliant */<br />

下 面 的 序 列 更 为 清 晰 和 安 全 :<br />

++u8b;<br />

u8a = u8b + u8c;<br />

u8c --;<br />

6.13 控 制 语 句 表 达 式<br />

规 则 13.1( 强 制 ): 赋 值 运 算 符 不 能 使 用 在 产 生 布 尔 值 的 表 达 式 上 。<br />

[Koenig 6]<br />

任 何 被 认 为 是 具 有 布 尔 值 的 表 达 式 上 都 不 能 使 用 赋 值 运 算 。 这 排 除 了 赋 值 运 算 符 的 简 单<br />

与 复 杂 的 使 用 形 式 , 其 操 作 数 是 具 有 布 尔 值 的 表 达 式 。 然 而 , 它 不 排 除 把 布 尔 值 赋 给 变 量 的<br />

操 作 。<br />

如 果 布 尔 值 表 达 式 需 要 赋 值 操 作 , 那 么 赋 值 操 作 必 须 在 操 作 数 之 外 分 别 进 行 。 这 可 以 帮<br />

助 避 免 “=” 和 “= =” 的 混 淆 , 帮 助 我 们 静 态 地 检 查 错 误 。<br />

见 术 语 表 中 的 “Boolean expressions”。<br />

例 如 :<br />

x = y;<br />

if (x != 0)<br />

{<br />

foo ();<br />

}<br />

不 能 写 成 :<br />

if ( ( x = y ) != 0 ) /* Boolean by context */<br />

{<br />

foo ();<br />

}<br />

或 者 更 坏 的 :<br />

if (x = y)<br />

{<br />

foo ();<br />

}<br />

规 则 13.2( 建 议 ): 数 的 非 零 检 测 应 该 明 确 给 出 , 除 非 操 作 数 是 有 效 的 布 尔 类 型 。<br />

当 要 检 测 一 个 数 据 不 等 于 零 时 , 该 测 试 要 明 确 给 出 。 本 规 则 的 例 外 是 该 数 据 代 表 布 尔 类<br />

型 的 值 , 虽 然 在 C 中 布 尔 数 实 际 上 也 是 整 数 。 本 规 则 的 着 眼 点 是 在 代 码 的 清 晰 上 , 给 出 整 数<br />

和 逻 辑 数 之 间 的 清 晰 划 分 。<br />

43

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

Saved successfully!

Ooh no, something went wrong!