用于标识 XL C/C++ 编译器的宏

XL C/C++ 编译器相关的大多数宏都是预定义且受保护的,这意味着如果您尝试取消定义或重新定义它们,那么编译器将发出警告。 您可以使用这些宏来区分 XL C/C++ 使用的代码与程序中其他编译器使用的代码。

IBM® XL C/C++ for AIX® 16.1中提供了两类调用命令。 有关详细信息,请参阅 调用编译器。 这两类调用命令具有不同的预定义宏:
  • xlc/xlC 和同等特殊调用,请参见表1
  • 对于 xlclang/xlclang + + ,请参阅 表 2

基于 XL 的前端开始您可以使用 -qshowmacros=pre -E 编译器选项查看预定义宏的值。 基于 XL 的前端端

基于 Clang 的前端开始您可以在空源文件中使用 -qshowmacros -E 查看预定义宏的值。基于 Clang 的前端端

表 1. 与编译器相关的预定义宏 用于 xlc/xlC 和等效的特殊调用
预定义宏名称 描述 预定义值
仅限 C__IBMC__ 指示 XL C 编译器的级别。 格式为 VRM的整数,其中:
V
表示版本号
R
表示发行版号
M
表示修改号
仅限 C + +__IBMCPP__ 指示 XL C++ 编译器的级别。 格式为 VRM的整数,其中:
V
表示版本号
R
表示发行版号
M
表示修改号
仅 C。__xlc__ 指示 XL C 编译器的级别。 格式为 V.R.M.F 的字符串,其中:
V
表示版本号
R
表示发行版号
M
表示修改号
F
表示修订级别
__xlC__ 以十六进制格式指示 XL C 和 XL C++ 编译器的 VR 级别。 格式为 0xVVRR 的 4 位十六进制整数,其中:
V
表示版本号
R
表示发行版号
__xlC_ver__ 以十六进制格式指示 XL C 和 XL C++ 编译器的 MF 级别。 格式为 0x0000MMFF 的 8 位十六进制整数,其中:
M
表示修改号
F
表示修订级别

例如,在 PTF 3 中,宏的值为 0x00000003。

表 2。 与编译器相关的预定义宏 对于 xlclang/xlclang + +
预定义宏名称 描述 预定义值
__ibmxl__ 指示正在使用 XL C/C++ 编译器。 1
__ibmxl_vrm__ 指示使用单个整数进行排序的 XL C/C++ 编译器的 VRM 级别。 十六进制整数,其值如下所示:
(((__ibmxl_version__) << 24) | \
 ((__ibmxl_release__) << 16) | \ 
 ((__ibmxl_modification__) << 8) \
)
__ibmxl_version__ 指示 XL C/C++ 编译器的版本号。 表示版本号的整数
__ibmxl_release__ 指示 XL C/C++ 编译器的发行版号。 表示发行版号的整数
__ibmxl_modification__ 指示 XL C/C++ 编译器的修改号。 表示修改号的整数
__ibmxl_ptf_fix_level__ 指示 XL C/C++ 编译器的 PTF 修订级别。 表示修订号的整数
__clang__ 指示使用 Clang 前端 1
__clang_major__ 指示 Clang 前端的主要版本号。 4
__clang_minor__ 指示 Clang 前端的次版本号。 0
__clang_patchlevel__ 指示 Clang 前端的补丁级别号。 1
__clang_version__ 指示 Clang 前端的完整版本。 4.0.1 (tags/RELEASE_401/final)
注意:

除了 xlclang/xlclang + + 的预定义宏外,您还可以指定 -qxlcompatmacros 以定义 表 1中列出的五个旧宏。 当您将程序从 IBM XL C/C++ for AIX, V13.1.3 或更低发行版迁移到由 xlclangxlclang + +调用的 IBM XL C/C++ for AIX 16.1 时,这很有用。