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> 与 ANSI C 的 差 别为 将 函 数 声 明 为 内 联 , 在 其 声 明 中 使 用 inline 关 键 字 , 例 如 :inline intinc (int *a){(*a)++;}( 如 果 使 用 -traditional 选 项 或 -ansi 选 项 , 用 _inline_ 代 替 inline。) 还可 以 通 过 使 用 命 令 行 选 项 -finline-functions 将 所 有 “ 足 够 简 单 ” 的 函 数 内 联 。编 译 器 可 以 根 据 对 函 数 大 小 的 估 计 , 直 观 地 决 定 哪 些 函 数 足 够 简 单 , 可 以 这 样 集 成 。函 数 定 义 中 的 某 些 用 法 可 能 使 函 数 不 适 合 于 内 联 替 代 。 这 些 用 法 包 括 :varargs 的 使用 、 alloca 的 使 用 , 长 度 可 变 数 据 的 使 用 , 以 及 相 对 goto 和 非 局 部 goto 的 使 用 。如 果 使 用 了 命 令 行 选 项 -winline, 当 标 识 为 inline 的 函 数 不 能 被 替 代 时 , 会 发 出警 告 , 并 给 出 失 败 原 因 。在 MPLAB <strong>C30</strong> 语 法 中 , 关 键 字 inline 不 会 影 响 函 数 的 链 接 。当 一 个 函 数 同 时 为 inline 和 static 时 , 如 果 对 该 函 数 的 所 有 调 用 都 集 成 到 调 用 函数 中 , 且 从 不 使 用 该 函 数 的 地 址 , 那 么 该 函 数 自 身 的 汇 编 程 序 代 码 从 不 会 被 引 用 。 在这 种 情 况 下 , MPLAB <strong>C30</strong> 实 际 上 并 不 输 出 该 函 数 的 汇 编 代 码 , 除 非 指 定 命 令 行 选 项-fkeep-inline-functions。 有 些 调 用 由 于 各 种 原 因 不 能 被 集 成 ( 特 别 是 在 函 数定 义 之 前 的 调 用 不 能 被 集 成 , 定 义 内 的 递 归 调 用 也 不 能 被 集 成 )。 如 果 存 在 非 集 成 的 调用 , 那 么 会 以 通 常 方 式 将 函 数 编 译 成 汇 编 代 码 。 如 果 程 序 引 用 函 数 的 地 址 , 也 必 须 以通 常 的 方 式 编 译 函 数 , 因 为 它 不 能 被 内 联 。 仅 在 内 联 函 数 被 声 明 为 static, 且 函 数定 义 在 函 数 使 用 之 前 的 情 况 下 , 编 译 器 才 会 删 除 内 联 函 数 。当 inline 函 数 不 是 static 时 , 编 译 器 必 须 假 定 其 他 源 文 件 可 能 调 用 这 个 函 数 。 因为 全 局 符 号 只 能 在 所 有 程 序 中 定 义 一 次 , 不 能 在 其 他 源 文 件 中 定 义 该 函 数 , 所 以 其 他源 文 件 中 的 调 用 不 能 被 集 成 。 因 此 , 非 static 的 内 联 函 数 总 是 以 通 常 的 方 式 编 译 。如 果 我 们 在 函 数 定 义 中 同 时 指 定 inline 和 extern, 这 样 定 义 的 函 数 就 只 能 用 来 内联 。 不 能 以 通 常 的 方 式 编 译 函 数 , 即 使 显 式 地 引 用 其 地 址 。 这 种 地 址 变 成 了 一 个 外 部引 用 , 如 同 我 们 只 是 声 明 了 函 数 却 没 有 定 义 它 。同 时 使 用 inline 和 extern 对 于 宏 有 类 似 的 影 响 。 使 用 这 些 关 键 字 将 一 个 函 数 的 定义 放 在 头 文 件 中 , 并 且 将 定 义 的 另 外 一 份 拷 贝 ( 不 带 inline 和 extern) 放 在 库 文件 中 。 头 文 件 中 的 定 义 使 得 对 于 该 函 数 的 大 多 数 调 用 被 内 联 。 如 果 还 有 任 何 使 用 该 函数 的 地 方 , 将 引 用 库 文 件 中 的 拷 贝 。© 2005 Microchip Technology Inc. DS51284C_CN 第 23 页

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

Saved successfully!

Ooh no, something went wrong!