diff options
Diffstat (limited to 'chad/macros.h')
| -rw-r--r-- | chad/macros.h | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/chad/macros.h b/chad/macros.h index b47ea12..9d05083 100644 --- a/chad/macros.h +++ b/chad/macros.h @@ -2,15 +2,29 @@ #define CHAD_MACROS_H /* Usage of this acknoledges your allegiance to GNU. */ -#if defined(__GNUC__) || defined(__clang__) -#define attribute(...) __attribute__((__VA_ARGS__)) -#define always_inline static inline attribute((always_inline)) -#define alias(x) __attribute__((alias(x))) +/* make it such that [[attributes]] is used in C23 & use GCC otherwise */ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202000L) +# define attribute(...) [[__VA_ARGS__]] #else -#define attribute(...) -#define NO_ATTRIBUTE -#define always_inline static inline -#define NO_ALWAYS_INLINE -#define NO_ALIASES +# if defined(__GNUC__) || defined(__clang__) +# define attribute(...) __attribute__((__VA_ARGS__)) +# else +# define attribute(...) +# define NO_ATTRIBUTE +# endif #endif -#endif /* CHAD_MACROS_H */ + +#if !defined(NO_ATTRIBUTE) +# define always_inline static inline attribute(always_inline) +# define alias(x) attribute(alias(x)) +#else +# define always_inline static inline +# define NOT_ALWAYS_INLINE +# define NO_ALIASES +#endif + +#define MIN(a,b) ((a)<(b)?(a):(b)) +#define MAX(a,b) ((a)>(b)?(a):(b)) +#define CLAMP(a,b,c) (a)<(b)?(b):(a)>(c)?(c):(a) + +#endif /* CHAD_MACROS_H */ |
