第1章简介本章介绍随RealView编译工具(RVCT)一起提供的ARM编译器。本章介绍了需要遵循的标准进行,并概述了RVCT随附的运行时库。它包含以下几节:第1-2页的关于ARM编译器.第1-3页的源语言模式.第1-5页的语言扩展和语言遵从性第1-7页的C和C++库.ARMDUI0348AC版权所有2007ARMLimited。保留所有权利。1-1
ARM DUI 0348AC 版权所有 © 2007 ARM Limited。保留所有权利。 1-1 第 1 章 简介 本章介绍随 RealView 编译工具 (RVCT) 一起提供的 ARM 编译器。本章介绍了需 要遵循的标准进行,并概述了 RVCT 随附的运行时库。它包含以下几节: • 第1-2 页的关于 ARM 编译器 • 第1-3 页的源语言模式 • 第1-5 页的语言扩展和语言遵从性 • 第1-7 页的C 和 C++ 库
简介1.1关于ARM编译器利用ARM编译器armcc可以编译C和C++代码。编译器是一种成熟的编译器。利用命令行选项,可以控制优化级别。可以将:ISO标准C:1990源代码ISO标准C:1999源代码,复杂数字和宽I/O除外ISO标准C++:2003源代码编译为32位ARM代码16/32位Thumb-2代码16位Thumb代码遵循ARM体系结构的基础标准应用程序二进制接口(BSABI)。特别是,编译器可以生成ELF格式的输出对象。生成DWARF调试标准版本3(DWARF3)调试信息。RVCT还支持DWARF2调试表。有关详细信息,请参阅库指南中第1-3页的用于实现ARM体系结构兼容性的ABI。可以生成输出代码的汇编语言列表,并且可以交叉存取带有源代码的汇编语言列表。如果是从先前的版本升级到RVCT或者是初次使用RVCT,请务必阅读RealView编译工具要点指南,了解最新信息。1-2ARMDUI0348AC版权所有2007ARMLimited。保留所有权利
简介 1-2 版权所有 © 2007 ARM Limited。保留所有权利。 ARM DUI 0348AC 1.1 关于 ARM 编译器 利用 ARM 编译器 armcc 可以编译 C 和 C++ 代码。 编译器: • 是一种成熟的编译器。利用命令行选项,可以控制优化级别。 • 可以将: — ISO 标准 C:1990 源代码 — ISO 标准 C:1999 源代码,复杂数字和宽 I/O 除外 — ISO 标准 C++:2003 源代码 编译为: — 32 位 ARM 代码 — 16/32 位 Thumb-2 代码 — 16 位 Thumb 代码 • 遵循 ARM 体系结构的基础标准应用程序二进制接口 (BSABI)。特别是,编 译器可以: — 生成 ELF 格式的输出对象。 — 生成 DWARF 调试标准版本 3 (DWARF 3) 调试信息。 RVCT 还支持 DWARF 2 调试表。 有关详细信息,请参阅库指南中第1-3 页的用于实现 ARM 体系结构兼容性 的 ABI。 • 可以生成输出代码的汇编语言列表,并且可以交叉存取带有源代码的汇编 语言列表。 如果是从先前的版本升级到 RVCT 或者是初次使用 RVCT,请务必阅读RealView 编译工具要点指南,了解最新信息
简介1.2源语言模式ARM编译器有三种不同的源语言模式可用于编译不同种类的C和C++源代码。这些模式是ISOC90ISOC99ISOC++1.2.1ISOC90ARM编译器编译根据1990C标准和附录而定义的C,宽I/O除外ISO/IEC9899:1990。1990C国际标准。ISO/IEC9899AM1。1995标准附录1,通过wchar.h和wtype.h增加了对国际字符的支持。ARM编译器还支持几种ISOC90扩展。有关详细信息,请参阅第1-5页的语言扩展和语言遵从性。在整篇文档中,术语C90是指ISOC90(宽I/O除外)以及ARM扩展。要编译C90代码,可使用编译器选项--c90。这是缺省设置。严格C90是指根据1990C标准和附录定义的C,宽I/O除外。另请参阅第2-14页的--c90.第1-5页的语言扩展和语言遵从性附录B标准C实现定义1.2.2ISOC99ARM编译器编译根据1999C标准和附录而定义的C,复杂数字和宽I/O除外ISO/IEC9899:1999。1999C国际标准。ARM编译器还支持几种ISOC99扩展。有关详细信息,请参阅第1-5页的语言扩展和语言遵从性。1-3ARMDUI0348AC版权所有2007ARMLimited。保留所有权利
简介 ARM DUI 0348AC 版权所有 © 2007 ARM Limited。保留所有权利。 1-3 1.2 源语言模式 ARM 编译器有三种不同的源语言模式可用于编译不同种类的 C 和 C++ 源代码。 这些模式是: • ISO C90 • ISO C99 • ISO C++ 1.2.1 ISO C90 ARM 编译器编译根据 1990 C 标准和附录而定义的 C,宽 I/O 除外: • ISO/IEC 9899:1990。 1990 C 国际标准。 • ISO/IEC 9899 AM1。 1995 标准附录 1,通过 wchar.h 和 wtype.h 增加了对国 际字符的支持。 ARM 编译器还支持几种 ISO C90 扩展。有关详细信息,请参阅第1-5 页的语言 扩展和语言遵从性。 在整篇文档中,术语: C90 是指 ISO C90(宽 I/O 除外)以及 ARM 扩展。 要编译 C90 代码,可使用编译器选项 -c90。这是缺省设置。 严格 C90 是指根据 1990 C 标准和附录定义的 C,宽 I/O 除外。 另请参阅 • 第2-14 页的- - c90 • 第1-5 页的语言扩展和语言遵从性 • 附录 B 标准 C 实现定义. 1.2.2 ISO C99 ARM 编译器编译根据 1999 C 标准和附录而定义的 C,复杂数字和宽 I/O 除外: • ISO/IEC 9899:1999。 1999 C 国际标准。 ARM 编译器还支持几种 ISO C99 扩展。有关详细信息,请参阅第1-5 页的语言 扩展和语言遵从性
简介在整篇文档中,术语C99是指ISOC99(复杂数字和宽I/O除外)以及ARM和GNU扩展。要编译C99代码,可使用编译器选项--c99。严格C99是指根据1999C标准和附录而定义的C,复杂数字和宽I/O除外。标准C是指严格C99。c是指C90、严格C90、C99和标准C中的任何一种。另请参阅.第2-14页的--c99第1-5页的语言扩展和语言遵从性附录B标准C实现定义1.2.3ISOC++ARM编译器编译根据2003标准而定义的C++,宽流和导出模板除外ISO/IEC14822:2003。2003C++国际标准。ARM编译器还支持几种ISOC++扩展。有关详细信息,请参阅第1-5页的语言扩展和语言遵从性。在整篇文档中,术语严格C++是指ISOC++,宽流和导出模板除外。标准C++是指严格C++。C++是指ISOC++(宽流和导出模板除外),含有或不含ARM扩展。要编译C++代码,可使用编译器选项--cpp。另请参阅第2-15页的--cpp第1-5页的语言扩展和语言遵从性附录C标准C++实现定义1-4ARMDUI0348AC版权所有2007ARMLimited。保留所有权利
简介 1-4 版权所有 © 2007 ARM Limited。保留所有权利。 ARM DUI 0348AC 在整篇文档中,术语: C99 是指 ISO C99(复杂数字和宽 I/O 除外)以及 ARM 和 GNU 扩展。 要编译 C99 代码,可使用编译器选项 -c99。 严格 C99 是指根据 1999 C 标准和附录而定义的 C,复杂数字和宽 I/O 除外。 标准 C 是指严格 C99。 C 是指 C90、严格 C90、C99 和标准 C 中的任何一种。 另请参阅 • 第2-14 页的- - c99 • 第1-5 页的语言扩展和语言遵从性 • 附录 B 标准 C 实现定义. 1.2.3 ISO C++ ARM 编译器编译根据 2003 标准而定义的 C++,宽流和导出模板除外: • ISO/IEC 14822:2003。 2003 C++ 国际标准。 ARM 编译器还支持几种 ISO C++ 扩展。有关详细信息,请参阅第1-5 页的语言 扩展和语言遵从性。 在整篇文档中,术语: 严格 C++ 是指 ISO C++,宽流和导出模板除外。 标准 C++ 是指严格 C++。 C++ 是指 ISO C++(宽流和导出模板除外),含有或不含 ARM 扩 展。 要编译 C++ 代码,可使用编译器选项 -cpp。 另请参阅 • 第2-15 页的- - cpp • 第1-5 页的语言扩展和语言遵从性 • 附录 C 标准 C++ 实现定义
简介1.3语言扩展和语言遵从性编译器支持大量对各种源语言的扩展。它还提供几个命令行选项,以控制与可用源语言的遵从性。1.3.1语言扩展编译器支持的语言扩展按如下分类C99功能编译器可以使用C99的某些语言功能严格C90的扩展,如//样式的注释标准C++和严格C90的扩展,如restrict指针.有关详细信息,请参阅第3-5页的C90中提供的C99语言功能.第3-7页的C++和C90中提供的C99语言功能标准C扩展编译器支持多个严格C99扩展,例如,重写旧式非原型定义的函数原型。有关详细信息,请参阅第3-10页的标准C语言扩展。C90中也提供了这些标准C扩展。标准C++扩展编译器支持多个严格C++扩展,例如,类成员声明中的限定名称。有关详细信息,请参阅第3-15页的标准C++语言扩展。标准C和C90中都不提供这些扩展。标准C和标准C++扩展编译器支持严格C++和严格C90特有的某些扩展,如匿名类、结构和联合。有关详细信息,请参阅第3-19页的标准C和标准C++语言扩展。GNU扩展编译器支持GNU编译器提供的某些扩展,例如GNU样式的扩展左值和GNU内置函数。有关详细信息,请参阅语言遵从性.第3-25页的GNU语言扩展第4章编译器特有的功能ARMDUI0348AC1-5版权所有2007ARMLimited。保留所有权利
简介 ARM DUI 0348AC 版权所有 © 2007 ARM Limited。保留所有权利。 1-5 1.3 语言扩展和语言遵从性 编译器支持大量对各种源语言的扩展。它还提供几个命令行选项,以控制与可 用源语言的遵从性。 1.3.1 语言扩展 编译器支持的语言扩展按如下分类: C99 功能 编译器可以使用 C99 的某些语言功能: • 严格 C90 的扩展,如 // 样式的注释 • 标准 C++ 和严格 C90 的扩展,如 restrict 指针 有关详细信息,请参阅: • 第3-5 页的C90 中提供的 C99 语言功能 • 第3-7 页的C++ 和 C90 中提供的 C99 语言功能 标准 C 扩展 编译器支持多个严格 C99 扩展,例如,重写旧式非原型定义 的函数原型。有关详细信息,请参阅第3-10 页的标准 C 语言 扩展。 C90 中也提供了这些标准 C 扩展。 标准 C++ 扩展 编译器支持多个严格 C++ 扩展,例如,类成员声明中的限定 名称。有关详细信息,请参阅第3-15 页的标准 C++ 语言扩 展。 标准 C 和 C90 中都不提供这些扩展。 标准 C 和标准 C++ 扩展 编译器支持严格 C++ 和严格 C90 特有的某些扩展,如匿名 类、结构和联合。有关详细信息,请参阅第3-19 页的标准 C 和标准 C++ 语言扩展。 GNU 扩展 编译器支持 GNU 编译器提供的某些扩展,例如 GNU 样式的 扩展左值和 GNU 内置函数。有关详细信息,请参阅: • 语言遵从性 • 第3-25 页的GNU 语言扩展 • 第 4 章 编译器特有的功能