预定义宏

预定义宏#

下列宏名已预定义于每个翻译单元中:

预定义宏

解释说明

__cplusplus

代表所用的 C++ 标准版本,展开成值
199711L(C++11 前)
201103L(C++11)
201402L(C++14)
201703L(C++17)
202002L(C++20)
202302L(C++23) (宏常量)

__STDC_HOSTED__(C++11)

如果实现有宿主(在操作系统下运行)则展开成整数常量 1,如果实现自立(不在操作系统下运行)则展开成 0 (宏常量)

__FILE__

展开成当前文件名,作为字符串字面量,可用 #line 指令更改 (宏常量)

__LINE__

展开成源文件行号,整数常量,可用 #line 指令更改 (宏常量)

__DATE__

展开成翻译日期,形式为 "Mmm dd yyyy" 的字符串。如果月中日期数小于 10"dd" 的首字符为空格。月份名如同以 std::asctime() 生成 (宏常量)

__TIME__

展开成翻译时间,形式为 "hh:mm:ss" 的字符串字面量 (宏常量)

__STDCPP_DEFAULT_NEW_ALIGNMENT__(C++17)

展开成 std::size_t 字面量,其值为对不具对齐的 operator new 的调用所保证的对齐(更大的对齐将传递给具对齐重载,如 operator new(std::size_t, std::align_val_t)) (宏常量)

__STDCPP_­BFLOAT16_­T__
__STDCPP_­FLOAT16_­T__
__STDCPP_FLOAT32_T__
__STDCPP_FLOAT64_T__
__STDCPP_FLOAT128_T__(C++23)

当且仅当实现支持对应的扩展浮点类型时展开成 1 (宏常量)

实现可能会预定义下列其他的宏名:

预定义宏

解释说明

__STDC__

如果存在则为实现定义值,典型地用于指示 C 遵从性 (宏常量)

__STDC_VERSION__(C++11)

如果存在则为实现定义值 (宏常量)

__STDC_ISO_10646__(C++11)

如果 wchar_t 使用 Unicode,那么展开成 yyyymmL 形式的整数常量,日期指示所支持的 Unicode 的最近版本(C++23 前)如果存在则为实现定义值(C++23 起) (宏常量)

__STDC_MB_MIGHT_NEQ_WC__(C++11)

如果对于基本字符集成员 'x' == L'x' 可能为假,则展开成 1,如在基于 EBCDIC 并且为 wchar_t 使用 Unicode 的系统上。 (宏常量)

__STDCPP_THREADS__(C++11)

如果程序能拥有多于一个执行线程则展开成 1 (宏常量)

__STDCPP_STRICT_POINTER_SAFETY__(C++11)(C++23 中移除)

如果实现支持严格 std::pointer_safety 则展开成 1 (宏常量)

这些宏的值(除了 __FILE____LINE__)在整个翻译单元保持为常量。试图重定义或取消定义这些宏会导致未定义行为。

备注

注意:在每个函数体的作用域内部都有一个名为 __func__ 的特殊的函数局域预定义变量,它被定义为一个持有具有实现定义格式的函数名的静态字符数组。它不是预处理器宏,但它与 __FILE____LINE__ 一起使用,例如 assert。(C++11 起)