__has_include 对头文件是否存在进行判断

  • 我们在实际编写代码的时候,经常需要判断当前编译环境是否存在我们需要的头文件,根据存在情况做不同的操作

  • GCC 5开始支持的,Mac系统下 XCode自带的Clang编译器也是支持的。

  • 可以这样使用,判断是否有这些文件,并且定义相应的宏,下面做不同的处理:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #ifdef __has_include
    # if __has_include(<optional>)
    # include <optional>
    # define have_optional 1
    # elif __has_include(<experimental/optional>)
    # include <experimental/optional>
    # define have_optional 1
    # define experimental_optional
    # else
    # define have_optional 0
    # endif
    #endif
  • 也可以这样使用来判断,导入不同的头文件:

    1
    2
    3
    4
    5
    # if __has_include(<AFNetworking/AFNetworking.h>)
    #import <AFNetworking/AFNetworking.h>
    #else
    #import "AFNetworking.h"
    #endif