X-Git-Url: https://git.distorted.org.uk/~mdw/mLib/blobdiff_plain/33e3ac9056f046affd69e3b8871275e5e2697aa4..f7e192e7f9ed26e8c1aa77b9b9e4787b7120649a:/utils/macros.h diff --git a/utils/macros.h b/utils/macros.h index bcceecd..9e27a48 100644 --- a/utils/macros.h +++ b/utils/macros.h @@ -34,13 +34,15 @@ /*----- Header files ------------------------------------------------------*/ +#include + #ifndef MLIB_COMPILER_H # include "compiler.h" #endif /*----- Miscellaneous utility macros --------------------------------------*/ -#define N(v) (sizeof(v)/sizeof(*v)) +#define N(v) (sizeof(v)/sizeof(*(v))) #define MLIB__STR(x) #x #define STR(x) MLIB__STR(x) @@ -48,25 +50,32 @@ #define MLIB__GLUE(x, y) x##y #define GLUE(x, y) MLIB__GLUE(x, y) +#ifdef static_assert +# define STATIC_ASSERT(cond, msg) static_assert(cond, msg) +#else +# define STATIC_ASSERT(cond, msg) \ + IGNORABLE extern char static_assert_failed[2*!!(cond) - 1] +#endif + /*----- Compiler diagnostics ----------------------------------------------*/ /* --- Compiler-specific definitions --- */ #if GCC_VERSION_P(2, 5) || CLANG_VERSION_P(3, 3) -# define NORETURN __attribute__((noreturn)) -# define PRINTF_LIKE(fix, aix) __attribute__((format(printf, fix, aix))) -# define SCANF_LIKE(fix, aix) __attribute__((format(scanf, fix, aix))) -# define IGNORABLE __attribute__((unused)) +# define NORETURN __attribute__((__noreturn__)) +# define PRINTF_LIKE(fix, aix) __attribute__((__format__(printf, fix, aix))) +# define SCANF_LIKE(fix, aix) __attribute__((__format__(scanf, fix, aix))) +# define IGNORABLE __attribute__((__unused__)) #endif #if GCC_VERSION_P(4, 5) || CLANG_VERSION_P(3, 3) -# define DEPRECATED(msg) __attribute__((deprecated(msg))) +# define DEPRECATED(msg) __attribute__((__deprecated__(msg))) #elif GCC_VERSION_P(3, 1) -# define DEPRECATED(msg) __attribute__((deprecated)) +# define DEPRECATED(msg) __attribute__((__deprecated__)) #endif #if GCC_VERSION_P(4, 0) || CLANG_VERSION_P(3, 3) -# define EXECL_LIKE(ntrail) __attribute__((sentinel(ntrail))) +# define EXECL_LIKE(ntrail) __attribute__((__sentinel__(ntrail))) #endif #if CLANG_VERSION_P(3, 3) @@ -180,6 +189,10 @@ # define SCANF_LIKE(fmtix, argix) #endif +#ifndef NORETURN +# define NORETURN +#endif + #ifndef IGNORABLE # define IGNORABLE #endif