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.

[ 未 定 义 27、28]<br />

函 数 指 针 到 不 同 类 型 指 针 的 转 换 会 导 致 未 定 义 的 行 为 。 举 个 例 子 , 这 意 味 着 一 个 函 数 指<br />

针 不 能 转 换 成 指 向 不 同 类 型 函 数 的 指 针 。<br />

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

这 些 转 换 未 经 定 义 。<br />

规 则 11.3( 建 议 ):<br />

对 象 指 针 和 其 他 除 整 型 之 外 的 任 何 类 型 指 针 之 间 、 对 象 指 针 和 其 他 类<br />

型 对 象 的 指 针 之 间 、 对 象 指 针 和 void 指 针 之 间 不 能 进 行 转 换 。<br />

不 应 在 指 针 类 型 和 整 型 之 间 进 行 强 制 转 换<br />

[ 未 定 义 29]<br />

[ 实 现 24]<br />

当 指 针 转 换 到 整 型 时 所 需 要 的 整 型 的 大 小 是 实 现 定 义 的 。 尽 可 能 的 情 况 下 要 避 免 指 针 和<br />

整 型 之 间 的 转 换 , 但 是 在 访 问 内 存 映 射 寄 存 器 或 其 他 硬 件 特 性 时 这 是 不 可 避 免 的 。<br />

规 则 11.4( 建 议 ): 不 应 在 某 类 型 对 象 指 针 和 其 他 不 同 类 型 对 象 指 针 之 间 进 行 强 制 转 换 。<br />

如 果 新 的 指 针 类 型 需 要 更 严 格 的 分 配 时 这 样 的 转 换 可 能 是 无 效 的 。<br />

uint8_t * p1;<br />

uint32_t * p2;<br />

p2 = (uint32_t *) p1; /* Imcompatible alignment ? */<br />

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

如 果 指 针 所 指 向 的 类 型 带 有 const 或 volatile 限 定 符 , 那 么 移 除 限 定 符<br />

的 强 制 转 换 是 不 允 许 的 。<br />

[ 未 定 义 39、40]<br />

任 何 通 过 强 制 转 换 移 除 类 型 限 定 符 的 企 图 都 是 对 类 型 限 定 符 规 则 的 违 背 。 注 意 , 这 里 所<br />

指 的 限 定 符 与 任 何 可 以 应 用 在 指 针 本 身 的 限 定 符 不 同 。<br />

uint16_t x;<br />

uint16_t * const cpi = &x; /* const pointer */<br />

uint16_t * const * pcpi ; /* pointer to const pointer */<br />

const uint16_t * * ppci ; /* pointer to pointer to const */<br />

uint16_t * * ppi;<br />

const uint16_t * pci; /* pointer to const */<br />

volatile uint16_t * pvi; /* pointer to volatile */<br />

uint16_t * pi;<br />

…<br />

pi = cpi;<br />

/* Compliant – no conversion<br />

no cast required */<br />

pi = (uint16_t *)pci; /* Not compliant */<br />

pi = (uint16_t *)pvi ; /* Not compliant */<br />

ppi = (uint16_t *)pcpi ; /* Not compliant */<br />

ppi = (uint16_t *)ppci ; /* Not compliant */<br />

6.12 表 达 式<br />

规 则 12.1( 建 议 ): 不 要 过 分 依 赖 C 表 达 式 中 的 运 算 符 优 先 规 则<br />

括 号 的 使 用 除 了 可 以 覆 盖 缺 省 的 运 算 符 优 先 级 以 外 , 还 可 以 用 来 强 调 所 使 用 的 运 算 符 。<br />

37

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

Saved successfully!

Ooh no, something went wrong!