X-Git-Url: https://git.distorted.org.uk/~mdw/mLib/blobdiff_plain/c066b1ff1cfc727cfd8409f79b4d2b990c678196..f50c1365107c09453531f01bcaebc3b197c3627f:/utils/macros.h diff --git a/utils/macros.h b/utils/macros.h index 8f9f49e..9e27a48 100644 --- a/utils/macros.h +++ b/utils/macros.h @@ -34,6 +34,8 @@ /*----- Header files ------------------------------------------------------*/ +#include + #ifndef MLIB_COMPILER_H # include "compiler.h" #endif @@ -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