add static_assert and hide noreturn, alignas, alignof from C++

add static_assert and protect the other new C11 keyword macros
with #ifndef __cplusplus so they don't conflict with C++ keywords.
This commit is contained in:
Szabolcs Nagy 2014-08-26 17:42:15 +02:00 committed by Rich Felker
parent 18dde00713
commit 70729de075
3 changed files with 11 additions and 0 deletions

View File

@ -8,6 +8,10 @@
#define assert(x) ((void)((x) || (__assert_fail(#x, __FILE__, __LINE__, __func__),0))) #define assert(x) ((void)((x) || (__assert_fail(#x, __FILE__, __LINE__, __func__),0)))
#endif #endif
#ifndef __cplusplus
#define static_assert _Static_assert
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif

View File

@ -1,6 +1,8 @@
#ifndef _STDALIGN_H #ifndef _STDALIGN_H
#define _STDALIGN_H #define _STDALIGN_H
#ifndef __cplusplus
/* this whole header only works in C11 or with compiler extensions */ /* this whole header only works in C11 or with compiler extensions */
#if __STDC_VERSION__ < 201112L && defined( __GNUC__) #if __STDC_VERSION__ < 201112L && defined( __GNUC__)
#define _Alignas(t) __attribute__((__aligned__(t))) #define _Alignas(t) __attribute__((__aligned__(t)))
@ -9,6 +11,9 @@
#define alignas _Alignas #define alignas _Alignas
#define alignof _Alignof #define alignof _Alignof
#endif
#define __alignas_is_defined 1 #define __alignas_is_defined 1
#define __alignof_is_defined 1 #define __alignof_is_defined 1

View File

@ -1,5 +1,7 @@
#ifndef _STDNORETURN_H #ifndef _STDNORETURN_H
#define _STDNORETURN_H #define _STDNORETURN_H
#ifndef __cplusplus
#include <features.h> #include <features.h>
#define noreturn _Noreturn #define noreturn _Noreturn
#endif #endif
#endif