Professional C 20

Professional C  20

查询头文件是否存在查询属性是否存在查询语言和标准库特性C++提供了很多feature test macros,即功能特性测试宏,用于在预处理阶段检查编译器是否支持某种功能,根据是否支持采取不同的操作。

测试宏一般分为如下几类:

某头文件是否存在__has_include属性attribute是否存在语言功能特性标准库功能特性

测试宏返回值对应于相应功能特性被包含到工作草案时的年份与月份的整数字面量,如果不存在不支持则返回0。

查询头文件是否存在__has_include用于查询头文件是否存在,成功返回1,失败返回0。比如如下示例:

#ifdef __has_include // 检查 __has_include 是否存在 #if __has_include() // 检查标准库 #include #elif __has_include() // 检查实验版本 #include #elif __has_include() // 尝试外部库 #include #else // 完全找不到 #error "Missing " #endif#endif

查询属性是否存在__has_cpp_attribute(属性记号)用于查询指定的属性是否被编译器支持,成功返回年月份字面量。属性记号如下:

属性记号

属性

标准

carries_dependency

[[carries_dependency]]

200809L

(C++11)

deprecated

[[deprecated]]

201309L

(C++14)

fallthrough

[[fallthrough]]

201603L

(C++17)

likely

[[likely]]

201803L

(C++20)

maybe_unused

[[maybe_unused]]

201603L

(C++17)

no_unique_address

[[no_unique_address]]

201803L

(C++20)

nodiscard

[[nodiscard]]

201603L

(C++17)

201907L

(C++20)

noreturn

[[noreturn]]

200809L

(C++11)

unlikely

[[unlikely]]

201803L

(C++20)

示例如下:

#if __has_cpp_attribute // 检查 __has_cpp_attribute 是否存在 #if __has_cpp_attribute(deprecated) // 检查一个属性 #define DEPRECATED(msg) [[deprecated(msg)]] #endif#endif#ifndef DEPRECATED #define DEPRECATED(msg)#endifDEPRECATED("foo() has been deprecated") void foo();

查询语言和标准库特性可查询的特性太多,请查阅https://zh.cppreference.com/w/cpp/feature_test

相关新闻

小花钱包,来个人
帕尼尼球星卡FIFA365

小花钱包,来个人

🕒 06-30 👽 7730
高等数学:求“分段函数在分段点”的导数,可以直接用导数公式吗?
显卡选华硕还是索泰 ( 同样的显卡不同牌子是不是性能不一样?华硕和索泰这两个牌子的显卡那个好 )
oceania服务器是什么服?
365bet足球直播

oceania服务器是什么服?

🕒 08-06 👽 8073
四连冠!中国女乒3-1击败日本队 称霸2018世乒赛
365bet足球直播

四连冠!中国女乒3-1击败日本队 称霸2018世乒赛

🕒 07-09 👽 1151
封印者热门副本全攻略 寺院、龙殿、龙王副本详解