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 的 差 别2.4 语 句 差 别本 节 讲 述 普 通 ANSI C 与 MPLAB <strong>C30</strong> 所 接 受 C 之 间 的 语 句 差 别 。 语 句 差 别 是 基 本GCC 实 现 的 一 部 分 , 本 节 讨 论 的 内 容 基 于 标 准 GCC 文 档 , 选 择 了 GCC 中 MPLAB<strong>C30</strong> 部 分 的 特 定 语 法 和 语 义 来 讲 述 。• 将 标 号 作 为 值• 省 略 操 作 数 的 条 件 表 达 式• case 范 围2.4.1 将 标 号 作 为 值可 以 用 单 目 运 算 符 “&&” 获 得 在 当 前 函 数 ( 或 包 含 函 数 ) 中 定 义 的 标 号 的 地 址 。 值 的类 型 为 void *。 这 个 值 为 常 量 , 并 可 在 这 种 类 型 的 常 量 有 效 的 任 何 地 方 使 用 这 个 值 。例 如 :void *ptr;...ptr = &&foo;为 使 用 这 些 值 , 需 要 能 跳 转 到 值 。 这 通 过 相 对 goto 语 句 goto *exp; 来 实 现 。 例 如 :goto *ptr;可 使 用 void * 类 型 的 任 何 表 达 式 。这 些 常 量 的 一 个 用 途 是 用 于 初 始 化 用 作 跳 转 表 的 静 态 数 组 :static void *array[] = { &&foo, &&bar, &&hack };然 后 就 可 以 通 过 索 引 来 这 样 选 择 标 号 :goto *array[i];注 : 这 并 不 检 查 下 标 是 否 超 出 范 围 (C 中 的 数 组 索 引 从 不 这 样 做 )。这 种 标 号 值 数 组 的 用 途 与 switch 语 句 很 类 似 。 switch 语 句 更 整 齐 , 比 数 组 更 好 。标 号 值 的 另 外 一 个 用 途 是 在 线 程 代 码 的 解 释 程 序 中 。 解 释 程 序 函 数 中 的 标 号 可 存 储 在线 程 代 码 中 用 于 快 速 调 度 。这 种 机 制 可 能 被 错 误 使 用 , 而 跳 转 到 其 他 函 数 的 代 码 中 。 编 译 器 不 能 阻 止 这 种 现 象 的发 生 , 因 此 必 须 小 心 , 确 保 目 标 地 址 对 于 当 前 函 数 有 效 。© 2005 Microchip Technology Inc. DS51284C_CN 第 27 页

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

Saved successfully!

Ooh no, something went wrong!