FFmpeg
5.1.6
libavutil
attributes.h
Go to the documentation of this file.
1
/*
2
* copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
/**
22
* @file
23
* Macro definitions for various function/variable attributes
24
*/
25
26
#ifndef AVUTIL_ATTRIBUTES_H
27
#define AVUTIL_ATTRIBUTES_H
28
29
#ifdef __GNUC__
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))
32
#else
33
# define AV_GCC_VERSION_AT_LEAST(x,y) 0
34
# define AV_GCC_VERSION_AT_MOST(x,y) 0
35
#endif
36
37
#ifdef __has_builtin
38
# define AV_HAS_BUILTIN(x) __has_builtin(x)
39
#else
40
# define AV_HAS_BUILTIN(x) 0
41
#endif
42
43
#ifndef av_always_inline
44
#if AV_GCC_VERSION_AT_LEAST(3,1)
45
# define av_always_inline __attribute__((always_inline)) inline
46
#elif defined(_MSC_VER)
47
# define av_always_inline __forceinline
48
#else
49
# define av_always_inline inline
50
#endif
51
#endif
52
53
#ifndef av_extern_inline
54
#if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__)
55
# define av_extern_inline extern inline
56
#else
57
# define av_extern_inline inline
58
#endif
59
#endif
60
61
#if AV_GCC_VERSION_AT_LEAST(3,4)
62
# define av_warn_unused_result __attribute__((warn_unused_result))
63
#else
64
# define av_warn_unused_result
65
#endif
66
67
#if AV_GCC_VERSION_AT_LEAST(3,1)
68
# define av_noinline __attribute__((noinline))
69
#elif defined(_MSC_VER)
70
# define av_noinline __declspec(noinline)
71
#else
72
# define av_noinline
73
#endif
74
75
#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__)
76
# define av_pure __attribute__((pure))
77
#else
78
# define av_pure
79
#endif
80
81
#if AV_GCC_VERSION_AT_LEAST(2,6) || defined(__clang__)
82
# define av_const __attribute__((const))
83
#else
84
# define av_const
85
#endif
86
87
#if AV_GCC_VERSION_AT_LEAST(4,3) || defined(__clang__)
88
# define av_cold __attribute__((cold))
89
#else
90
# define av_cold
91
#endif
92
93
#if AV_GCC_VERSION_AT_LEAST(4,1) && !defined(__llvm__)
94
# define av_flatten __attribute__((flatten))
95
#else
96
# define av_flatten
97
#endif
98
99
#if AV_GCC_VERSION_AT_LEAST(3,1)
100
# define attribute_deprecated __attribute__((deprecated))
101
#elif defined(_MSC_VER)
102
# define attribute_deprecated __declspec(deprecated)
103
#else
104
# define attribute_deprecated
105
#endif
106
107
/**
108
* Disable warnings about deprecated features
109
* This is useful for sections of code kept for backward compatibility and
110
* scheduled for removal.
111
*/
112
#ifndef AV_NOWARN_DEPRECATED
113
#if AV_GCC_VERSION_AT_LEAST(4,6) || defined(__clang__)
114
# define AV_NOWARN_DEPRECATED(code) \
115
_Pragma("GCC diagnostic push"
) \
116
_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \
117
code \
118
_Pragma("GCC diagnostic pop")
119
#elif defined(_MSC_VER)
120
# define AV_NOWARN_DEPRECATED(code) \
121
__pragma(warning(push)) \
122
__pragma(warning(disable : 4996)) \
123
code; \
124
__pragma(warning(pop))
125
#else
126
# define AV_NOWARN_DEPRECATED(code) code
127
#endif
128
#endif
129
130
#if defined(__GNUC__) || defined(__clang__)
131
# define av_unused __attribute__((unused))
132
#else
133
# define av_unused
134
#endif
135
136
/**
137
* Mark a variable as used and prevent the compiler from optimizing it
138
* away. This is useful for variables accessed only from inline
139
* assembler without the compiler being aware.
140
*/
141
#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__)
142
# define av_used __attribute__((used))
143
#else
144
# define av_used
145
#endif
146
147
#if AV_GCC_VERSION_AT_LEAST(3,3) || defined(__clang__)
148
# define av_alias __attribute__((may_alias))
149
#else
150
# define av_alias
151
#endif
152
153
#if (defined(__GNUC__) || defined(__clang__)) && !defined(__INTEL_COMPILER)
154
# define av_uninit(x) x=x
155
#else
156
# define av_uninit(x) x
157
#endif
158
159
#if defined(__GNUC__) || defined(__clang__)
160
# define av_builtin_constant_p __builtin_constant_p
161
# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos)))
162
#else
163
# define av_builtin_constant_p(x) 0
164
# define av_printf_format(fmtpos, attrpos)
165
#endif
166
167
#if AV_GCC_VERSION_AT_LEAST(2,5) || defined(__clang__)
168
# define av_noreturn __attribute__((noreturn))
169
#else
170
# define av_noreturn
171
#endif
172
173
#endif
/* AVUTIL_ATTRIBUTES_H */
Generated by
1.9.4