📅  最后修改于: 2023-12-03 15:13:14.328000             🧑  作者: Mango
__has_include
是C++17引入的一个宏,用于判断是否存在某个header文件。
在编译时,通过判断条件语句中的__has_include(header)
是否为真,来决定是否包含该头文件。这样可以避免在一些平台上使用不存在的头文件,从而使代码更加健壮,可移植。
#ifdef __has_include
# if __has_include(<header>)
// 包含头文件
# endif
#endif
示例如下:
#include <iostream>
#ifdef __has_include
# if __has_include(<vector>)
# include <vector>
# else
# error "vector header not found"
# endif
#endif
int main()
{
std::vector<int> vec = {1, 2, 3, 4};
for (auto i : vec) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
在编译时,会首先判断<vector>
头文件是否存在,如果存在,则将该头文件包含进来,否则会报错。
__has_include
语法只在C++17及以上版本中被支持。<header>
形式的头文件包含,不支持"header.h"
形式的头文件包含,因为在部分编译器中包含的路径可能不同。__has_include
语法时可能略有不同,需要根据实际情况酌情使用。