MPLAB ® <strong>C30</strong> 用 户 指 南表 3-6: 不 被 -WALL 隐 含 的 警 告 / 错 误 选 项 ( 续 )选 项-Wmissing-noreturn 对 可 指 定 noreturn 属 性 的 函 数 产 生 警 告 。 这 些 函 数 仅 是 可 指定 这 一 属 性 的 函 数 , 并 不 是 已 指 定 了 这 一 属 性 的 函 数 。 手 工 检 验这 些 函 数 时 要 小 心 。 实 际 上 , 在 添 加 noreturn 属 性 之 前 也 不要 返 回 ; 否 则 可 能 会 引 入 微 小 的 代 码 生 成 bug。-Wmissing-prototypes 如 果 全 局 函 数 在 定 义 之 前 没 有 先 声 明 原 型 会 产 生 警 告 。 即 使 定 义本 身 提 供 了 原 型 也 会 发 出 这 个 警 告 。( 这 个 选 项 可 用 于 检 测 不 在头 文 件 中 声 明 的 全 局 函 数 。)-Wnested-externs 如 果 在 函 数 内 部 遇 到 了 extern 声 明 , 发 出 警 告 。-Wno-deprecateddeclarations不 要 对 使 用 通 过 deprecated 属 性 指 定 为 deprecated 的 函 数 、变 量 和 类 型 发 出 警 告 。-Wpadded 如 果 一 个 结 构 中 包 含 了 填 充 , 不 管 是 为 了 对 齐 结 构 的 一 个 元 素 ,还 是 为 了 对 齐 整 个 结 构 , 都 发 出 警 告 。-Wpointer-arith 对 于 与 函 数 类 型 或 void 的 长 度 有 关 的 任 何 类 型 发 出 警 告 。 为 方便 用 void * 指 针 和 指 向 函 数 的 指 针 计 算 , MPLAB <strong>C30</strong> 将 这 些类 型 的 长 度 分 配 为 1。-Wredundant-decls 如 果 在 同 一 个 作 用 域 内 多 次 声 明 了 任 何 符 号 则 发 出 警 告 , 即 使 多个 声 明 都 有 效 且 没 有 改 变 任 何 符 号 。-Wshadow 当 一 个 局 部 变 量 屏 蔽 另 一 个 局 部 变 量 时 发 出 警 告 。-Wsign-compare-Wno-sign-compare当 比 较 有 符 号 值 和 无 符 号 值 时 , 将 有 符 号 值 转 换 为 无 符 号 值 , 比较 产 生 不 正 确 结 果 时 发 出 警 告 。 这 个 警 告 也 可 通 过 -W 来 使 能 ;要 获 得 -W 的 其 他 警 告 , 而 不 获 得 这 个 警 告 , 使 用-W -Wno-sign-compare。-Wstrict-prototypes 如 果 对 一 个 函 数 的 定 义 或 声 明 没 有 指 定 参 数 类 型 则 发 出 警 告 。( 如 果 函 数 定 义 或 声 明 前 有 指 定 函 数 参 数 类 型 的 声 明 , 则 允 许 旧式 函 数 定 义 而 不 发 出 警 告 。)-Wtraditional 如 果 某 些 语 法 结 构 在 传 统 C 和 ANSI C 中 操 作 不 同 , 产 生 警 告 。• 宏 参 数 出 现 在 宏 体 中 的 字 符 串 常 量 中 。 在 传 统 C 中 , 这 些 宏参 数 将 替 代 参 数 , 但 在 ANSI C 中 是 常 量 的 一 部 分 。• 在 一 个 块 中 声 明 为 external 的 函 数 , 在 块 结 束 后 被 使 用 。• switch 语 句 有 long 类 型 的 操 作 数 。• 非 静 态 函 数 声 明 后 跟 一 个 静 态 函 数 声 明 。 某 些 传 统 C 编 译 器不 接 受 这 种 语 法 结 构 。-Wundef 如 果 在 #if 伪 指 令 中 对 一 个 未 定 义 的 标 识 符 求 值 会 产 生 警 告 。-Wunreachable-code定 义如 果 编 译 器 检 测 到 代 码 将 永 远 不 会 被 执 行 到 则 发 出 警 告 。 即 使 在有 些 情 况 下 , 受 影 响 的 代 码 行 的 一 部 分 能 被 执 行 到 , 这 个 选 项 也可 能 产 生 警 告 , 因 此 在 删 除 明 显 执 行 不 到 的 代 码 时 要 小 心 。 例如 , 函 数 被 内 联 时 , 警 告 可 能 表 明 仅 在 函 数 的 一 个 内 联 拷 贝 中 ,该 行 执 行 不 到 。DS51284C_CN 第 40 页© 2005 Microchip Technology Inc.
使 用 MPLAB <strong>C30</strong> C 编 译 器表 3-6: 不 被 -WALL 隐 含 的 警 告 / 错 误 选 项 ( 续 )选 项-Wwrite-strings定 义字 符 串 常 量 类 型 为 const char[length] 时 , 将 一 个 字 符 串常 量 的 地 址 复 制 到 一 个 非 常 量 char * 指 针 会 产 生 警 告 。 这 些 警告 有 助 于 在 编 译 时 查 找 试 图 写 字 符 串 常 量 的 代 码 , 但 仅 是 在 声 明和 原 型 中 使 用 const 时 非 常 小 心 的 前 提 下 。 否 则 , 这 是 不 安 全的 , 这 也 是 -Wall 为 什 么 不 要 求 这 些 警 告 的 原 因 。3.5.5 调 试 选 项表 3-7:调 试 选 项选 项定 义-g 产 生 调 试 信 息 。MPLAB <strong>C30</strong> 支 持 同 时 使 用 -g 和 -O, 因 此 可 以 调 试 优 化 的 代 码 。调 试 优 化 代 码 的 缺 点 是 有 时 可 能 产 生 异 常 结 果 :- 某 些 声 明 的 变 量 可 能 根 本 不 存 在 ;- 控 制 流 程 可 能 短 暂 异 常 转 移 ;- 某 些 语 句 可 能 由 于 计 算 常 量 结 果 或 已 经 获 得 其 值 而 不 执 行 ;- 某 些 语 句 可 能 由 于 被 移 出 循 环 在 不 同 的 地 方 执 行 。尽 管 如 此 , 证 明 还 是 可 以 调 试 优 化 输 出 的 。 这 使 优 化 可 能 有 bug的 程 序 变 得 合 理 。-Q 使 编 译 器 打 印 它 在 编 译 的 每 个 函 数 名 , 并 在 结 束 时 打 印 关 于 每 遍编 译 的 一 些 统 计 信 息 。-save-temps不 要 删 除 中 间 文 件 。 将 中 间 文 件 放 在 当 前 目 录 中 , 并 根 据 源 文 件命 名 它 们 。 因 此 , 用 “-c -save-temps” 编 译 “foo.c” 将 生成 下 面 的 文 件 :‘foo.i’ ( 预 处 理 文 件 )‘foo.p’ ( 预 过 程 抽 象 汇 编 语 言 文 件 )‘foo.s’ ( 汇 编 语 言 文 件 )‘foo.o’ ( 目 标 文 件 )© 2005 Microchip Technology Inc. DS51284C_CN 第 41 页