附 录 B 条 件 编 译
V isu a l J + + 提 供 两 个 用 来 在 Ja va 中 条 件 编 译 代 码 的 新 机 制 条 件 伪 指 令和 条 件 方 法 下 表 描 述 了 所 有 这 些 可 用 的 条 件 伪 指 令 要 了 解 一 般 的 情况 见 条 件 伪 指 令 一 节 要 了 解 句 法 的 描 述 和 条 件 方 法 的 使 用 见
条 件 方 法 一 节 这 两 节 都 在 本 附 录 的 后 面
注 意 由 Visual J++ 提 供 的 条 件 伪 指 令 和 条 件 方 法 机 制 是 扩 充 到 由Microsoft 提 供 的 Java 语 言 中 的 因 此 包 含 这 些 机 制 的 源 代 码 在使 用 其 他 Java 开 发 工 具 时 不 能 适 当 编 译
条 件 伪 指 令 说 明
# if 条件 包含 或排除 源 代 码 取 决 于 它 的 表达式 或 标 识符的 结果值
#e lif 用于 # if 伪指 令 的 可选项 如 果前面 的 # if 测试 失败 #e lif 包含 或排 除源代 码 这取决 于它 自己 的表达 式 或 标识符 的结果 值
#e ls e 用于 # if 伪指 令的 可选项 如 果前面 的 # if 测试 失败 跟随
#e ls e 伪指 令的 源代码 将被 包含
#e nd if 使用 # if 伪指 令所 需要的 #e nd if 伪指 令关 闭一个 代码 的条件区
#d e fin e 定义 预处 理中的 标识 符
#u nde f 取消 预处 理中标 识符 的定义
# e rro r 生成 开发 者定义 的编 译时的 错误信 息
#w a rn ing 生成 开发 者定义 的编 译时的 警告信 息
# if #e lif #e lif #e ls e 和 #e n d if 条 件 伪 指 令
# if #e l if #e l if #e lse 和 #e nd if 伪 指 令 共 同 使 用 用 来 进 行 条 件 包 含 或排 除 源 文 件 编 译 的 源 代 码 行 开 始 所 有 的 条 件 区 的 # if 伪 指 令 必 须 有 一个 关 闭 条 件 区 的 #e nd if 伪 指 令 相 匹 配
语 法
# if < 表 达 式 >
包 含 的 代 码 # e lif < 表 达 式 >包 含 的 代 码
#e lse
包 含 的 代 码
# e nd if
跟 随 在 # if 和 #e l if 伪 代 码 后 面 的 表 达 式 必 须 是 一 个 有 效 的 布 尔 表 达 式 由布 尔 运 算 符 组 成 并 且 使 用 #de f ine 和 #unde f 编 译 器 伪 指 令 声 明 的 标 识符 如 果 跟 在 # if 伪 指 令 后 面 的 表 达 式 值 为 真 紧 接 在 该 伪 指 令 后 面 的 行将 保 留 在 源 文 件 中 如 果 该 表 达 式 的 值 为 假 则 在 该 伪 指 令 后 到 #e l if
#e lse 或 #e nd if 之 前 的 行 将 从 源 文 件 中 排 除
在 一 个 条 件 区 中 只 能 包 含 一 个 #e lse 伪 指 令 只 有 当 与 之 相 对 应 的 # if 伪指 令 值 为 假 时 跟 随 在 #e lse 伪 指 令 后 面 的 行 才 在 源 文 件 中 保 留
在 一 个 代 码 的 条 件 区 中 可 能 不 包 含 或 包 含 多 个 #e lse 伪 指 令 #e l if 伪 指 令是 e ls e if 的 缩 写 用 于 当 # if 伪 指 令 已 经 被 赋 值 并 且 该 值 为 假 时 其随 后 表 达 式 的 赋 值
用 于 条 件 编 译 中 的 表 达 式 与 用 于 Ja va 语 言 中 的 表 达 式 有 着 同 样 的 限 制 和行 为 例 如 所 有 Ja va 定 义 的 布 尔 和 位 运 算 符 都 被 接 受 并 且 运 算 符 的优 先 级 是 同 等 的 此 外 Ja va 语 言 还 定 义 括 号 用 来 强 制 改 变 赋 值 的 顺 序下 面 是 用 来 说 明 每 一 个 条 件 伪 指 令 的 例 子
#de f ine D E B U G
# u ndef R E T A IL
p u b lic c la ss te s t {
# if D E B U G
if ( cm d S tatu s .eq u als( invo ke E r ro r ) )
{
/ / T h e fo llo w ing line disp la ys a dia gnostic m essage: S y s tem .o u t .p r intln (" E r ro r : co m m and t im ed out." ) ;
/ / a p p ro p r ia te a c t io n s
/ / ta k en h ere
}
# elif R E T A IL
if ( cm d S tatu s .eq u als( invo ke E r ro r ) )
{
/ / a p p ro p r ia te a c t io n s
/ / ta k en h ere
}
# e ls e
# erro r M u st define D E B U G or R E T A IL ; # endif
}
#d e f in e 条 件 伪 指 令
#de f ine 伪 指 令 用 来 将 一 个 条 件 标 识 符 包 含 到 源 文 件 中 当 定 义 标 识 符时 该 标 识 符 能 够 用 在 该 源 文 件 所 包 含 的 所 有 类 中 这 个 伪 指 令 必 须 放在 源 文 件 的 开 始 在 它 的 前 面 只 能 有 注 释 和 其 他 的 条 件 编 译 伪 指 令
根 据 规 定 被 #de f ine 伪 指 令 定 义 的 标 识 符 的 值 将 总 是 为 真语 法
#D E F IN D < 标 识 符 >
在 上 面 显 示 的 标 识 符 长 度 最 长 可 为 1024 字 符 根 据 规 定 标 识 符 由 大 写字 符 组 成 用 来 说 明 它 们 的 用 途
下 面 的 例 子 用 来 说 明 #de f ine 伪 指 令 在 Ja va 应 用 程 序 中 的 用 途