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.

* jump_statement removed or just restricted to return depending on other rules */<br />

规 则 中 还 使 用 了 下 面 的 术 语 :<br />

switch label<br />

case clause<br />

default clause<br />

switch clause<br />

或 者 是 case 标 签 , 或 者 是 default 标 签<br />

任 何 两 个 switch label 之 间 的 代 码<br />

default 标 签 和 switch 语 句 结 尾 之 间 的 代 码<br />

或 者 是 case clause, 或 者 是 default clause<br />

switch 语 句 只 应 包 含 switch label 和 switch clause 而 没 有 其 他 代 码 。<br />

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

switch 标 签 只 能 用 在 当 最 紧 密 封 闭 (closely-enclosing) 的 复 合 语 句 是<br />

switch 语 句 体 的 时 候<br />

case 或 default 标 签 的 范 围 应 该 是 做 为 switch 语 句 体 的 复 合 语 句 。 所 有 case 子 句 和 default<br />

子 句 应 该 具 有 相 同 的 范 围 。<br />

规 则 15.2( 强 制 ): 无 条 件 的 break 语 句 应 该 终 止 每 个 非 空 的 switch 子 句 。<br />

[Koenig 22-24]<br />

每 个 switch 子 句 中 的 最 后 一 条 语 句 应 该 是 break 语 句 , 或 者 如 果 switch 子 句 是 复 合 语 句 ,<br />

那 么 复 合 语 句 的 最 后 一 条 语 句 应 该 是 break 语 句 。<br />

规 则 15.3( 强 制 ): switch 语 句 的 最 后 子 句 应 该 是 default 子 句 。<br />

对 最 后 的 default 子 句 的 要 求 是 出 于 保 护 性 编 程 。 该 子 句 应 该 执 行 适 当 的 动 作 , 或 者 包 含<br />

合 适 的 注 释 以 说 明 为 何 没 有 执 行 动 作 。<br />

规 则 15.4( 强 制 ): switch 表 达 式 不 应 是 有 效 的 布 尔 值 。<br />

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

例 如 :<br />

switch ( x == 0) /* not compliant – effectively Boolean */<br />

{<br />

…<br />

规 则 15.5( 强 制 ): 每 个 switch 语 句 至 少 应 有 一 个 case 子 句 。<br />

例 如 :<br />

switch (x)<br />

{<br />

uint8_t var; /* not compliant – decl before 1 st case */<br />

case 0:<br />

a = b;<br />

break; /* break is required here */<br />

case 1: /* empty clause, break not required */<br />

case 2:<br />

a = c; /* executed if x is 1 or 2 */<br />

if ( a == b )<br />

{<br />

case 3: /* not compliant – case is not allowed here */<br />

}<br />

49

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

Saved successfully!

Ooh no, something went wrong!