📜  __has_include (1)

📅  最后修改于: 2023-12-03 15:13:14.328000             🧑  作者: Mango

C++的__has_include介绍

__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>头文件是否存在,如果存在,则将该头文件包含进来,否则会报错。

注意事项
  1. __has_include语法只在C++17及以上版本中被支持。
  2. 支持<header>形式的头文件包含,不支持"header.h"形式的头文件包含,因为在部分编译器中包含的路径可能不同。
  3. 不同的编译器在解释__has_include语法时可能略有不同,需要根据实际情况酌情使用。

参考资料:https://en.cppreference.com/w/cpp/preprocessor/include