MISRA-C-:2004 - é误æ示ï¼åçäºå¼å¸¸
MISRA-C-:2004 - é误æ示ï¼åçäºå¼å¸¸
MISRA-C-:2004 - é误æ示ï¼åçäºå¼å¸¸
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