10.07.2015 Views

MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南

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.

MPLAB ® <strong>C30</strong> 用 户 指 南表 3-5: -WALL 隐 含 的 警 告 / 错 误 选 项 ( 续 )选 项-Wmultichar-Wno-multichar-Wparentheses-Wreturn-type-Wsequence-point定 义使 用 多 字 符 的 character 常 量 时 警 告 。 通 常 出 现 这 样 的 常 量是 由 于 输 入 错 误 。 由 于 这 种 常 量 具 有 实 现 定 义 的 值 , 不 应 将它 们 用 在 可 移 植 代 码 中 。 下 面 举 例 说 明 了 多 字 符 character常 量 的 使 用 :charxx(void){return('xx');}在 某 些 上 下 文 中 省 略 圆 括 号 时 警 告 , 如 在 需 要 真 值 的 上 下 文中 有 一 个 赋 值 , 或 者 运 算 符 嵌 套 的 运 算 优 先 级 容 易 混 淆 时 。当 函 数 定 义 为 其 返 回 值 类 型 默 认 为 int 时 发 出 警 告 。 如 果 函数 的 返 回 值 类 型 不 是 void, 那 么 不 带 返 回 值 的 任 何 return语 句 都 会 导 致 产 生 警 告 。由 于 违 背 C 标 准 中 的 顺 序 点 规 则 而 导 致 代 码 中 有 未 定 义 的 语义 时 发 出 警 告 。C 标 准 定 义 了 C 程 序 中 根 据 顺 序 点 对 表 达 式 求 值 的 顺 序 , 顺序 点 代 表 程 序 各 部 分 执 行 的 局 部 顺 序 : 在 顺 序 点 之 前 执 行 的部 分 和 顺 序 点 之 后 执 行 的 部 分 。 这 些 在 一 个 完 整 表 达 式 ( 不是 一 个 更 大 的 表 达 式 的 一 部 分 ) 的 求 值 之 后 , 在 对 第 一 个 运算 符 (&&、 ||、 ? : 或 , ( 逗 号 ) 运 算 符 ) 求 值 之 后 , 在 调 用函 数 前 ( 但 在 对 其 参 数 和 表 示 被 调 用 函 数 的 表 达 式 求 值 后 ),以 及 某 些 其 他 地 方 发 生 。 除 了 顺 序 点 规 则 指 定 的 顺 序 外 , 未指 定 表 达 式 的 子 表 达 式 的 求 值 顺 序 。 所 有 这 些 规 则 仅 规 定 了局 部 的 顺 序 , 而 没 有 规 定 全 局 的 顺 序 , 因 为 , 如 在 一 个 表 达式 中 调 用 了 两 个 函 数 , 而 它 们 之 间 没 有 顺 序 点 , 就 没 有 指 定函 数 调 用 的 顺 序 。 但 是 , 标 准 委 员 会 规 定 函 数 调 用 不 能 重 叠 。没 有 指 定 在 顺 序 点 之 间 , 对 对 象 的 值 的 修 改 何 时 生 效 。 操 作依 赖 于 这 一 点 的 程 序 有 不 确 定 的 操 作 ; C 标 准 规 定 ,“ 在 上一 个 顺 序 点 和 下 一 个 顺 序 点 之 间 , 对 象 所 储 存 的 值 最 多 只 能被 表 达 式 求 值 修 改 一 次 。 而 且 , 前 一 个 值 是 只 读 的 以 便 确 定将 被 储 存 的 值 。” 如 果 程 序 违 反 这 些 规 则 , 任 何 特 定 实 现 的 结果 都 是 完 全 不 可 预 估 的 。具 有 未 定 义 操 作 的 代 码 示 例 有 :a = a++;,a[n] = b[n++]; 及 a[i++] = i;。 这 个 选 项 不 能 诊 断 某些 更 复 杂 的 情 况 , 并 可 能 给 出 偶 然 错 误 的 结 果 , 但 通 常 在 检测 程 序 中 的 这 类 问 题 时 , 这 个 选 项 还 是 很 有 效 的 。DS51284C_CN 第 36 页© 2005 Microchip Technology Inc.

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

Saved successfully!

Ooh no, something went wrong!