02.11.2014 Views

RealView 编译工具要点指南 - ARM Information Center

RealView 编译工具要点指南 - ARM Information Center

RealView 编译工具要点指南 - ARM Information Center

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.

关 于 早 期 版 本<br />

• 新 的 __swi_indirect_r7 的 行 为 与 __swi_indirect_r12 相 类 似 , 只 不 过 它 使 用<br />

r7 而 不 使 用 r12。 <strong>ARM</strong> Linux 上 的 Thumb 应 用 程 序 使 用 __swi_indirect_r7<br />

进 行 内 核 系 统 调 用 。<br />

• --force_new_nothrow 的 行 为 已 扩 充 , 它 可 以 使 任 何 重 载 的 全 局 operator new<br />

被 作 为 throw() 来 处 理 。<br />

• <strong>ARM</strong> 编 译 器 C 实 现 已 更 改 , 现 在 对 超 出 范 围 的 枚 举 器 值 发 出 警 告 。<br />

在 严 格 的 C 中 , 枚 举 器 值 必 须 可 以 表 示 为 int, 例 如 它 们 的 范 围 必 须 为<br />

-2147483648 至 +2147483647( 含 这 两 个 值 )。 在 早 期 版 本 的 RVCT 中 , 超<br />

出 范 围 的 值 将 转 换 为 int, 而 不 会 发 出 警 告 ( 除 非 指 定 了 --strict 选 项 )。<br />

在 RVCT v2.2 中 , 这 些 值 的 处 理 方 式 与 在 C++ 中 相 同 , 即 将 它 们 当 作<br />

unsigned int、 long long 或 unsigned long long 处 理 。 这 表 示 如 果 您 使 用 最<br />

新 版 本 的 RVCT, 则 具 有 超 范 围 值 的 enum 类 型 的 大 小 可 能 与 在 C 中 的 大 小<br />

不 同 。 例 如 :<br />

enum E1 { k1 = 0xffffffff }; /* value == 2147483648u; out-of-range in C */<br />

/* C: before 2.2: sizeof(enum E1) == 1 */<br />

/* C: 2.2: sizeof(enum E1) == 4 */<br />

/* C++: all: sizeof(enum E1) == 4 */<br />

enum E2 { k2 = (int)0xffffffff }; /* value == -1; in range */<br />

/* C: before 2.2: sizeof(enum E1) == 1 */<br />

/* C: 2.2: sizeof(enum E1) == 1 */<br />

/* C++: all: sizeof(enum E1) == 1 */<br />

enum E3 { k3 = -1, k4 = 0xffffffff }; /* value == 2147483648u; out-of-range in C */<br />

/* C: before 2.2: sizeof(enum E1) == 1 */<br />

/* C: 2.2: sizeof(enum E1) == 8; use long long */<br />

/* C++: all: sizeof(enum E1) == 8; use long long */<br />

要 确 保 报 告 超 出 范 围 的 警 告 , 请 使 用 以 下 命 令 将 它 们 更 改 为 错 误 :<br />

armcc --diag_error 66 ...<br />

如 果 您 使 用 C++ 或 命 令 行 选 项 --enum_is_int、--strict 或<br />

--strict_warnings, 则 没 有 变 化 。<br />

• <strong>ARM</strong> 编 译 器 现 在 支 持 在 <strong>ARM</strong> 和 GNU 模 式 中 使 用 __attribute__ 关 键 字 。<br />

• <strong>ARM</strong> 编 译 器 现 在 支 持 新 的 变 量 属 性 zero_init 或 __zero_init__, 用 于 指 定<br />

不 具 有 初 始 值 设 定 项 的 变 量 被 放 置 在 ZI 数 据 节 中 。<br />

• <strong>ARM</strong> 编 译 器 提 供 新 的 选 项 --dwarf3, 用 于 指 定 DWARF 3 标 准 调 试 表 , 以<br />

便 当 编 译 以 C 或 C++ 编 写 的 代 码 时 描 述 <strong>ARM</strong> 或 Thumb 程 序 。 如 果 您 不 指<br />

定 格 式 , 则 编 译 器 假 定 为 DWARF 2。<br />

• <strong>ARM</strong> 编 译 器 支 持 新 的 环 境 变 量 RVCT22_CCOPT, 它 可 用 于 指 定 编 译 器 的 命 令<br />

行 选 项 。<br />

<strong>ARM</strong> DUI 0202IC Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. A-25<br />

Unrestricted Access<br />

Non-Confidential

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

Saved successfully!

Ooh no, something went wrong!