

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AL2023 中的 C、C\+\+ 和 Fortran
<a name="c-cplusplus"></a>

AL2023 包含 GNU 编译器集合 (GCC) 以及用于 LLVM（低级虚拟机）的 Clang 前端。

GCC 的主要版本在 AL2023 的整个生命周期中将保持不变。其次要版本带有错误修复，可能包含在 AL2023 版本中。其他错误、性能和安全修复可能会向后移植到 AL2023 附带的 GCC 的主要版本中。

 AL2023 包含版本 11 的 GCC 作为默认编译器，带有 C (`gcc`)、C\+\+ (`g++`) 和 Fortran (`gfortran`) 前端。此外，AL2023 提供版本 14 的 GCC 作为可选的替代编译器，可与默认版本一起安装。

 AL2023 未启用 Ada (`gnat`)、Go (`gcc-go`)、Objective-C 或 Objective-C\+\+ 前端。

 构建 AL2023 RPM 时使用的默认编译器标志包括优化和强化标志。要使用 GCC 构建您自己的代码，我们建议您包含优化和强化标志。

**注意**  
调用 `gcc --version` 时，会显示一个版本字符串，例如 `gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4)`。`Red Hat` 指的是 Amazon Linux GCC 软件包所基于的 [GCC 供应商分支](https://gcc.gnu.org/gitwrite.html#vendor)。根据 `gcc --help` 显示的错误报告 URL，所有错误报告和支持请求均应指向 Amazon Linux。  
有关此供应商分支中一些长期变更（例如 `__GNUC_RH_RELEASE__` 宏）的更多信息，请参阅 [Fedora 程序包源码](https://src.fedoraproject.org/rpms/gcc/pull-request/27)。

有关核心工具链的更多信息，请参阅 [Core 工具链软件包 glibc、gcc、binutils](core-glibc.md)。

有关 AL2023 及其与其他 Linux 发行版关系的更多信息，请参阅 [与 Fedora 的关系](relationship-to-fedora.md)。

有关 AL2023 与 AL2 相比编译器三元组变更的更多信息，请参阅 [编译器三元组](compare-with-al2.md#compiler-triplet)。

**Topics**
+ [GCC 14](#gcc14)
+ [语言标准版本比较](#language-standards-comparison)

## GCC 14
<a name="gcc14"></a>

 AL2023 提供 GCC 14 作为可选编译器，可与默认的 GCC 11 一起安装。GCC 14 包含最新的语言特性和优化，适用于需要较新 C、C\+\+ 或 Fortran 标准支持的项目。

要安装 GCC 14，请使用以下命令：

```
sudo dnf install gcc14 gcc14-c++ gcc14-gfortran
```

 GCC 14 编译器安装时使用特定于版本的命令名称，以避免与默认的 GCC 11 冲突：
+ `gcc14-gcc`：C 编译器
+ `gcc14-g++`：C\+\+ 编译器
+ `gcc14-gfortran`：Fortran 编译器

示例用法：

```
gcc14-gcc -o myprogram myprogram.c
gcc14-g++ -o mycppprogram mycppprogram.cpp
gcc14-gfortran -o myfortranprogram myfortranprogram.f90
```

 您可以通过运行以下命令验证安装的版本：

```
gcc14-gcc --version
```

 这将显示类似以下的版本信息：`gcc14-gcc (GCC) 14.2.1 20250110 (Red Hat 14.2.1-7)`

**注意**  
 GCC 11 和 GCC 14 可以同时安装在同一系统上。默认的 `gcc`、`g++` 和 `gfortran` 命令将继续使用 GCC 11，而 GCC 14 通过特定于版本的命令访问。

## 语言标准版本比较
<a name="language-standards-comparison"></a>

 下表比较了不同 Amazon Linux 版本和 GCC 编译器版本的默认语言标准版本：


| Amazon Linux 版本 | C 标准（默认） | C\+\+ 标准（默认） | Fortran 标准 | 
| --- | --- | --- | --- | 
| AL2 附带 GCC 7（默认） | C11（201112L） | C\+\+14（201402L） | Fortran 2008 | 
| AL2 附带 GCC 10（可选） | C17/C18（201710L） | C\+\+14（201402L） | Fortran 2008 | 
| AL2023 附带 GCC 11（默认） | C17/C18（201710L） | C\+\+17（201703L） | Fortran 2008 | 
| AL2023 附带 GCC 14（可选） | C17/C18（201710L） | C\+\+17（201703L） | Fortran 2008 | 

 **各 GCC 版本的主要改进：**
+  **GCC 10 对比 GCC 7：**将默认 C 标准从 C11 升级到 C17/C18，增加了对 C\+\+20 特性的支持，并改进了优化能力。
+  **GCC 11 对比 GCC 10：**将默认 C\+\+ 标准从 C\+\+14 升级到 C\+\+17，增强了对 C\+\+20 的支持，并增加了实验性的 C\+\+23 特性。
+  **GCC 14 对比 GCC 11：**增加了完整的 C23 标准支持，增强了 C\+\+23 特性，改进了优化，并提高了标准符合性。

 **支持的语言标准：**
+  **C 标准：**所有版本均支持 C90、C99、C11 和 C17/C18。GCC 10\+ 支持 C2x（C23 草案），而 GCC 14 提供完整的 C23 支持。
+  **C\+\+ 标准：**所有版本均支持 C\+\+98、C\+\+03、C\+\+11、C\+\+14、C\+\+17 和 C\+\+20。GCC 11\+ 提供实验性的 C\+\+23 支持，GCC 14 则提供增强的 C\+\+23 特性。
+  **Fortran 标准：**所有版本主要支持 Fortran 2008，并根据 GCC 版本提供不同程度的 Fortran 2018 特性支持。

**注意**  
 虽然 GCC 11 和 14 的默认标准保持一致，但 GCC 14 在显式使用 `-std=` 标志请求时，提供了显著改进的语言特性支持、更好的优化、增强的诊断信息以及对新标准更完整的实现。