extern "C" {
#endif
+/*----- Header files ------------------------------------------------------*/
+
+#include <stddef.h>
+
/*----- Data structures ---------------------------------------------------*/
union align {
int i;
long l;
double d;
+ long double ld;
void *p;
void (*f)(void *);
struct notexist *s;
+#if __STDC_VERSION__ >= 201112
+ max_align_t m;
+#endif
};
/*----- Macros provided ---------------------------------------------------*/
+#if __STDC_VERSION__ >= 201112
+# define ALIGNOF(ty) _Alignof(ty)
+#else
+# define ALIGNOF(ty) (offsetof(struct { unsigned char _x; ty _y; }, _y))
+#endif
+
#define ALIGN(sz) do { \
- sz += sizeof(union align) - 1; \
- sz -= sz % sizeof(union align); \
+ (sz) += ALIGNOF(union align) - 1; \
+ (sz) -= (sz)%ALIGNOF(union align); \
} while (0)
/*----- That's all, folks -------------------------------------------------*/