1 #ifndef _FEATURES_H 2 #define _FEATURES_H 3 4 #if defined(_ALL_SOURCE) && !defined(_GNU_SOURCE) 5 #define _GNU_SOURCE 1 6 #endif 7 8 #if defined(_DEFAULT_SOURCE) && !defined(_BSD_SOURCE) 9 #define _BSD_SOURCE 1 10 #endif 11 12 #if !defined(_POSIX_SOURCE) && !defined(_POSIX_C_SOURCE) \ 13 && !defined(_XOPEN_SOURCE) && !defined(_GNU_SOURCE) \ 14 && !defined(_BSD_SOURCE) && !defined(__STRICT_ANSI__) 15 #define _BSD_SOURCE 1 16 #define _XOPEN_SOURCE 700 17 #endif 18 19 #if __STDC_VERSION__ >= 199901L && !defined(__cplusplus) 20 #define __restrict restrict 21 #elif !defined(__GNUC__) 22 #define __restrict 23 #endif 24 25 #if __STDC_VERSION__ >= 199901L || defined(__cplusplus) 26 #define __inline inline 27 #elif !defined(__GNUC__) 28 #define __inline 29 #endif 30 31 #if defined(__cplusplus) 32 #if __cplusplus >= 201103L 33 #define _Noreturn [[ noreturn ]] 34 #else 35 #define _Noreturn 36 #endif 37 #elif __STDC_VERSION__ >= 201112L 38 #elif defined(__GNUC__) 39 #define _Noreturn __attribute__((__noreturn__)) 40 #else 41 #define _Noreturn 42 #endif 43 44 #define __REDIR(x,y) __typeof__(x) x __asm__(#y) 45 46 #endif 47