MPLAB ® <strong>C30</strong> 用 户 指 南3.5.3 控 制 C 语 言 的 选 项表 3-4:选 项C 语 言 控 制 选 项定 义-ansi 支 持 所 有 ( 且 仅 支 持 ) ANSI 标 准 的 C 程 序 。-aux-info filename-ffreestanding-fno-asm-fno-builtin-fno-builtin-function-fsigned-char-fsigned-bitfields-funsigned-bitfields-fno-signed-bitfields-fno-unsigned-bitfields-funsigned-char-fwritable-strings对 于 在 翻 译 单 元 中 声 明 和 / 或 定 义 的 函 数 , 包 括 头 文 件 中 的函 数 , 输 出 到 给 定 文 件 名 的 原 型 声 明 中 。 除 了 C, 这 个 选 项在 其 他 语 言 中 通 常 被 忽 略 。 除 了 声 明 以 外 , 文 件 在 注 释 中 指出 了 每 个 声 明 的 来 源 ( 源 文 件 和 行 ), 不 论 声 明 是 隐 含 的 ,原 型 的 , 还 是 非 原 型 的 ( 在 行 号 和 冒 号 后 面 的 第 一 个 字 符中 ,I、N 代 表 新 的 ,O 代 表 旧 的 ), 也 不 论 它 来 自 声 明 还 是定 义 ( 在 随 后 的 字 符 中 , 分 别 用 C 和 F 代 表 )。 如 果 是 函数 定 义 , 在 函 数 声 明 之 后 的 注 释 中 , 还 提 供 K&R 型 参 数 列表 , 后 跟 这 些 参 数 的 声 明 。指 明 编 译 在 独 立 环 境 中 进 行 。 这 意 指 -fno-builtin 选项 。 独 立 的 环 境 就 是 其 中 可 能 不 存 在 标 准 库 , 程 序 也 不 必 在主 函 数 中 启 动 的 环 境 。 最 显 而 易 见 的 例 子 就 是 OS 内 核 。 这与 -fno-hosted 等 价 。不 识 别 asm、 inline 或 typeof 关 键 字 , 因 此 代 码 可 以将 这 些 单 词 用 作 标 识 符 。 可 以 使 用 关 键 字 __asm__、__inline__ 和 __typeof__。 -ansi 意 指 -fno-asm。不 识 别 不 以 __builtin_ 作 为 前 缀 开 始 的 内 建 函 数 。使 char 型 变 量 为 有 符 号 , 就 像 signed char。( 这 是 默认 设 置 。)如 果 声 明 时 未 使 用 signed 或 unsigned, 这 些 选 项 用 来控 制 位 域 是 有 符 号 还 是 无 符 号 的 。 默 认 情 况 下 , 这 样 的 位 域都 是 有 符 号 的 , 除 非 使 用 -traditional, 它 使 位 域 总 是无 符 号 的 。使 char 型 变 量 无 符 号 , 就 像 usigned char。将 字 符 串 存 储 到 可 写 的 数 据 段 中 , 但 不 要 使 字 符 串 成 为 唯 一的 。DS51284C_CN 第 34 页© 2005 Microchip Technology Inc.
使 用 MPLAB <strong>C30</strong> C 编 译 器3.5.4 警 告 与 错 误 控 制 选 项警 告 是 诊 断 消 息 , 它 报 告 非 本 质 错 误 、 但 有 危 险 的 语 法 结 构 , 或 暗 示 可 能 存 在 错 误 。可 以 使 用 以 -W 开 头 的 选 项 请 求 许 多 特 定 的 警 告 , 例 如 , 使 用 -Wimplicit 请 求 关 于隐 式 声 明 的 警 告 。 每 条 这 些 特 定 的 警 告 选 项 也 可 以 用 以 -Wno- 开 头 的 相 反 形 式 来 关 闭警 告 , 如 -Wno-implicit。 本 手 册 只 列 出 了 这 两 种 形 式 中 的 一 种 , 这 两 种 形 式 都 不是 默 认 的 。下 面 的 选 项 控 制 MPLAB <strong>C30</strong> C 编 译 器 产 生 的 警 告 的 数 量 和 种 类 。表 3-5:-WALL 隐 含 的 警 告 / 错 误 选 项选 项定 义-fsyntax-only 检 查 代 码 的 语 法 , 除 此 之 外 不 做 任 何 事 情 。-pedantic发 出 严 格 ANSI C 要 求 的 所 有 警 告 ; 拒 绝 所 有 使 用 禁 止 扩 展名 的 程 序 。-pedantic-errors 类 似 于 -pedantic, 只 是 发 出 错 误 而 不 是 警 告 。-w 禁 止 所 有 警 告 消 息 。-Wall使 能 本 表 中 列 出 的 所 有 -W 选 项 。 这 将 使 能 关 于 某 些 用 户 认 为有 问 题 的 , 及 容 易 避 免 的 ( 或 修 改 来 禁 止 警 告 的 ) 语 法 结 构的 所 有 警 告 , 即 使 是 与 宏 一 起 。-Wchar-subscripts 如 果 数 组 下 标 具 有 char 类 型 则 警 告 。-Wcomment-Wcomments-Wdiv-by-zero当 注 释 开 始 符 号 /* 出 现 在 /* 注 释 中 , 或 反 斜 杠 换 行 出 现 在// 注 释 中 发 出 警 告 。编 译 时 发 现 整 数 除 以 0 则 警 告 。 禁 止 这 个 消 息 可 使 用-Wno-div-by-zero。 浮 点 数 除 以 0 不 会 警 告 , 因 为 它 可 以是 获 得 无 穷 大 和 NaNs 的 一 种 合 法 方 法 。( 这 是 默 认 情 况 。)函 数 在 声 明 前 被 使 用 将 给 出 错 误 。检 查 对 printf 和 scanf 等 函 数 的 调 用 , 确 保 所 提 供 参 数 的类 型 与 指 定 的 格 式 字 符 串 相 符 合 。-Werror-implicitfunction-declaration-Wformat-Wimplicit等 价 于 同 时 指 定 -Wimplicit-int 和-Wimplicit-function-declaration。-Wimplicit-functiondeclaration函 数 在 声 明 前 被 使 用 将 给 出 警 告 。-Wimplicit-int 如 果 声 明 没 有 指 定 类 型 则 警 告 。-Wmain-Wmissing-braces如 果 main 的 类 型 有 问 题 则 警 告 。 main 应 该 是 一 个 具 有 外 部链 接 的 函 数 , 它 返 回 int, 并 带 有 正 确 类 型 的 0、 2 或 3 个 参数 。如 果 一 个 聚 集 或 联 合 的 初 始 化 中 括 号 不 全 则 警 告 。 在 下 面 的例 子 中 , a 的 初 始 化 中 括 号 不 全 , 而 对 b 的 初 始 化 是 正 确 的 。int a[2][2] = { 0, 1, 2, 3 };int b[2][2] = { { 0, 1 }, { 2, 3 } };© 2005 Microchip Technology Inc. DS51284C_CN 第 35 页