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.
* 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