Go to the documentation of this file.
   26 #ifndef AVUTIL_ATTRIBUTES_H 
   27 #define AVUTIL_ATTRIBUTES_H 
   30 #    define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y)) 
   31 #    define AV_GCC_VERSION_AT_MOST(x,y)  (__GNUC__ < (x) || __GNUC__ == (x) && __GNUC_MINOR__ <= (y)) 
   33 #    define AV_GCC_VERSION_AT_LEAST(x,y) 0 
   34 #    define AV_GCC_VERSION_AT_MOST(x,y)  0 
   38 #    define AV_HAS_BUILTIN(x) __has_builtin(x) 
   40 #    define AV_HAS_BUILTIN(x) 0 
   43 #ifdef __has_attribute 
   44 #    define AV_HAS_ATTRIBUTE(x) __has_attribute(x) 
   46 #    define AV_HAS_ATTRIBUTE(x) 0 
   49 #if defined(__cplusplus) && defined(__has_cpp_attribute) 
   50 #    define AV_HAS_STD_ATTRIBUTE(x) __has_cpp_attribute(x) 
   51 #elif !defined(__cplusplus) && defined(__has_c_attribute) 
   52 #    define AV_HAS_STD_ATTRIBUTE(x) __has_c_attribute(x) 
   54 #    define AV_HAS_STD_ATTRIBUTE(x) 0 
   57 #ifndef av_always_inline 
   58 #if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) 
   59 #    define av_always_inline __attribute__((always_inline)) inline 
   60 #elif defined(_MSC_VER) 
   61 #    define av_always_inline __forceinline 
   63 #    define av_always_inline inline 
   67 #ifndef av_extern_inline 
   68 #if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__) 
   69 #    define av_extern_inline extern inline 
   71 #    define av_extern_inline inline 
   75 #if AV_HAS_STD_ATTRIBUTE(nodiscard) 
   76 #    define av_warn_unused_result [[nodiscard]] 
   77 #elif AV_GCC_VERSION_AT_LEAST(3,4) || defined(__clang__) 
   78 #    define av_warn_unused_result __attribute__((warn_unused_result)) 
   80 #    define av_warn_unused_result 
   83 #if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) 
   84 #    define av_noinline __attribute__((noinline)) 
   85 #elif defined(_MSC_VER) 
   86 #    define av_noinline __declspec(noinline) 
   91 #if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) 
   92 #    define av_pure __attribute__((pure)) 
   97 #if AV_GCC_VERSION_AT_LEAST(2,6) || defined(__clang__) 
   98 #    define av_const __attribute__((const)) 
  103 #if AV_GCC_VERSION_AT_LEAST(4,3) || defined(__clang__) 
  104 #    define av_cold __attribute__((cold)) 
  109 #if AV_GCC_VERSION_AT_LEAST(4,1) && !defined(__llvm__) 
  110 #    define av_flatten __attribute__((flatten)) 
  115 #if AV_HAS_STD_ATTRIBUTE(deprecated) 
  116 #    define attribute_deprecated [[deprecated]] 
  117 #elif AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) 
  118 #    define attribute_deprecated __attribute__((deprecated)) 
  119 #elif defined(_MSC_VER) 
  120 #    define attribute_deprecated __declspec(deprecated) 
  122 #    define attribute_deprecated 
  130 #ifndef AV_NOWARN_DEPRECATED 
  131 #if AV_GCC_VERSION_AT_LEAST(4,6) || defined(__clang__) 
  132 #    define AV_NOWARN_DEPRECATED(code) \ 
  133         _Pragma("GCC diagnostic push") \ 
  134         _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ 
  136         _Pragma("GCC diagnostic pop") 
  137 #elif defined(_MSC_VER) 
  138 #    define AV_NOWARN_DEPRECATED(code) \ 
  139         __pragma(warning(push)) \ 
  140         __pragma(warning(disable : 4996)) \ 
  142         __pragma(warning(pop)) 
  144 #    define AV_NOWARN_DEPRECATED(code) code 
  148 #if AV_HAS_STD_ATTRIBUTE(maybe_unused) 
  149 #    define av_unused [[maybe_unused]] 
  150 #elif defined(__GNUC__) || defined(__clang__) 
  151 #    define av_unused __attribute__((unused)) 
  161 #if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) 
  162 #    define av_used __attribute__((used)) 
  167 #if AV_GCC_VERSION_AT_LEAST(3,3) || defined(__clang__) 
  168 #   define av_alias __attribute__((may_alias)) 
  173 #if (defined(__GNUC__) || defined(__clang__)) && !defined(__INTEL_COMPILER) 
  174 #    define av_uninit(x) x=x 
  176 #    define av_uninit(x) x 
  179 #if defined(__GNUC__) || defined(__clang__) 
  180 #    define av_builtin_constant_p __builtin_constant_p 
  182 #    define av_builtin_constant_p(x) 0 
  190 #ifdef __MINGW_PRINTF_FORMAT 
  191 #    define AV_PRINTF_FMT __MINGW_PRINTF_FORMAT 
  192 #elif AV_HAS_ATTRIBUTE(format) 
  193 #    define AV_PRINTF_FMT __printf__ 
  196 #ifdef __MINGW_SCANF_FORMAT 
  197 #    define AV_SCANF_FMT __MINGW_SCANF_FORMAT 
  198 #elif AV_HAS_ATTRIBUTE(format) 
  199 #    define AV_SCANF_FMT __scanf__ 
  203 #    define av_printf_format(fmtpos, attrpos) __attribute__((format(AV_PRINTF_FMT, fmtpos, attrpos))) 
  205 #    define av_printf_format(fmtpos, attrpos) 
  209 #    define av_scanf_format(fmtpos, attrpos) __attribute__((format(AV_SCANF_FMT, fmtpos, attrpos))) 
  211 #    define av_scanf_format(fmtpos, attrpos) 
  214 #if AV_HAS_STD_ATTRIBUTE(noreturn) 
  215 #    define av_noreturn [[noreturn]] 
  216 #elif AV_GCC_VERSION_AT_LEAST(2,5) || defined(__clang__) 
  217 #    define av_noreturn __attribute__((noreturn))