aboutsummaryrefslogtreecommitdiff
path: root/chad/macros.h
diff options
context:
space:
mode:
Diffstat (limited to 'chad/macros.h')
-rw-r--r--chad/macros.h34
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 */