📄 acc_chk.ch
字号:
/* ACC -- Automatic Compiler Configuration Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer All Rights Reserved. This software is a copyrighted work licensed under the terms of the GNU General Public License. Please consult the file "ACC_LICENSE" for details. Markus F.X.J. Oberhumer <markus@oberhumer.com> http://www.oberhumer.com/ *//*************************************************************************//**************************************************************************/#if !defined(ACCCHK_ASSERT)# define ACCCHK_ASSERT(expr) ACC_COMPILE_TIME_ASSERT(expr)#endif/* compile-time sign */#if !defined(ACCCHK_ASSERT_SIGN_T)# define ACCCHK_ASSERT_SIGN_T(type,relop) \ ACCCHK_ASSERT( (type) (-1) relop (type) 0 ) \ ACCCHK_ASSERT( (type) (~(type)0) relop (type) 0 ) \ ACCCHK_ASSERT( (type) (~(type)0) == (type) (-1) )#endif#if !defined(ACCCHK_IS_SIGNED_T)# define ACCCHK_ASSERT_IS_SIGNED_T(type) ACCCHK_ASSERT_SIGN_T(type,<)#endif#if !defined(ACCCHK_IS_UNSIGNED_T)# if (ACC_BROKEN_INTEGRAL_PROMOTION)# define ACCCHK_ASSERT_IS_UNSIGNED_T(type) \ ACCCHK_ASSERT( (type) (-1) > (type) 0 )# else# define ACCCHK_ASSERT_IS_UNSIGNED_T(type) ACCCHK_ASSERT_SIGN_T(type,>)# endif#endif/*************************************************************************// check preprocessor**************************************************************************/#if (ACC_0xffffffffL - ACC_UINT32L_C(4294967294) != 1)# error "preprocessor error 1"#endif#if (ACC_0xffffffffL - ACC_UINT32L_C(0xfffffffd) != 2)# error "preprocessor error 2"#endif#define ACCCHK_VAL 1#define ACCCHK_TMP1 ACCCHK_VAL#undef ACCCHK_VAL#define ACCCHK_VAL 2#define ACCCHK_TMP2 ACCCHK_VAL#if (ACCCHK_TMP1 != 2)# error "preprocessor error 3a"#endif#if (ACCCHK_TMP2 != 2)# error "preprocessor error 3b"#endif#undef ACCCHK_VAL#if (ACCCHK_TMP2)# error "preprocessor error 3c"#endif#if (ACCCHK_TMP2 + 0 != 0)# error "preprocessor error 3d"#endif#undef ACCCHK_TMP1#undef ACCCHK_TMP2/*************************************************************************// check basic arithmetics**************************************************************************/ ACCCHK_ASSERT(__ACC_INT_MAX(2) == 1) ACCCHK_ASSERT(__ACC_INT_MAX(8) == 127) ACCCHK_ASSERT(__ACC_INT_MAX(16) == 32767) ACCCHK_ASSERT(__ACC_UINT_MAX(2) == 3) ACCCHK_ASSERT(__ACC_UINT_MAX(16) == 0xffffU) ACCCHK_ASSERT(__ACC_UINT_MAX(32) == 0xffffffffUL)#if !defined(ACC_BROKEN_INTEGRAL_PROMOTION) ACCCHK_ASSERT(__ACC_UINT_MAX(__ACC_INT_BIT) == ~(0u)) ACCCHK_ASSERT(__ACC_UINT_MAX(__ACC_LONG_BIT) == ~(0ul))#endif/*************************************************************************// check basic types**************************************************************************/ ACCCHK_ASSERT_IS_SIGNED_T(signed char) ACCCHK_ASSERT_IS_UNSIGNED_T(unsigned char) ACCCHK_ASSERT(sizeof(signed char) == sizeof(char)) ACCCHK_ASSERT(sizeof(unsigned char) == sizeof(char)) ACCCHK_ASSERT(sizeof(char) == 1) ACCCHK_ASSERT(sizeof(char) == sizeof((char)0))#if defined(__cplusplus) ACCCHK_ASSERT(sizeof('\0') == sizeof(char))#else# if (ACC_CC_DMC) /* Digital Mars C is broken */# else ACCCHK_ASSERT(sizeof('\0') == sizeof(int))# endif#endif#if defined(acc_alignof) ACCCHK_ASSERT(acc_alignof(char) == 1) ACCCHK_ASSERT(acc_alignof(signed char) == 1) ACCCHK_ASSERT(acc_alignof(unsigned char) == 1)#endif ACCCHK_ASSERT_IS_SIGNED_T(short) ACCCHK_ASSERT_IS_UNSIGNED_T(unsigned short) ACCCHK_ASSERT(sizeof(short) == sizeof(unsigned short)) ACCCHK_ASSERT(sizeof(short) >= 2) ACCCHK_ASSERT(sizeof(short) >= sizeof(char)) ACCCHK_ASSERT(sizeof(short) == sizeof((short)0))#if (SIZEOF_SHORT > 0) ACCCHK_ASSERT(sizeof(short) == SIZEOF_SHORT)#endif ACCCHK_ASSERT_IS_SIGNED_T(int) ACCCHK_ASSERT_IS_UNSIGNED_T(unsigned int) ACCCHK_ASSERT(sizeof(int) == sizeof(unsigned int)) ACCCHK_ASSERT(sizeof(int) >= 2) ACCCHK_ASSERT(sizeof(int) >= sizeof(short)) ACCCHK_ASSERT(sizeof(int) == sizeof(0)) ACCCHK_ASSERT(sizeof(int) == sizeof((int)0))#if (SIZEOF_INT > 0) ACCCHK_ASSERT(sizeof(int) == SIZEOF_INT)#endif ACCCHK_ASSERT_IS_SIGNED_T(long) ACCCHK_ASSERT_IS_UNSIGNED_T(unsigned long) ACCCHK_ASSERT(sizeof(long) == sizeof(unsigned long)) ACCCHK_ASSERT(sizeof(long) >= 4) ACCCHK_ASSERT(sizeof(long) >= sizeof(int)) ACCCHK_ASSERT(sizeof(long) == sizeof(0L)) ACCCHK_ASSERT(sizeof(long) == sizeof((long)0))#if (SIZEOF_LONG > 0) ACCCHK_ASSERT(sizeof(long) == SIZEOF_LONG)#endif ACCCHK_ASSERT_IS_UNSIGNED_T(size_t) ACCCHK_ASSERT(sizeof(size_t) >= sizeof(int)) ACCCHK_ASSERT(sizeof(size_t) == sizeof(sizeof(0))) /* sizeof() returns size_t */#if (SIZEOF_SIZE_T > 0) ACCCHK_ASSERT(sizeof(size_t) == SIZEOF_SIZE_T)#endif ACCCHK_ASSERT_IS_SIGNED_T(ptrdiff_t) ACCCHK_ASSERT(sizeof(ptrdiff_t) >= sizeof(int)) ACCCHK_ASSERT(sizeof(ptrdiff_t) >= sizeof(size_t))#if !defined(ACC_BROKEN_SIZEOF) ACCCHK_ASSERT(sizeof(ptrdiff_t) == sizeof((char*)0 - (char*)0))# if (ACC_HAVE_MM_HUGE_PTR) ACCCHK_ASSERT(4 == sizeof((char __huge*)0 - (char __huge*)0))# endif#endif#if (SIZEOF_PTRDIFF_T > 0) ACCCHK_ASSERT(sizeof(ptrdiff_t) == SIZEOF_PTRDIFF_T)#endif ACCCHK_ASSERT(sizeof(void*) >= sizeof(char*))#if (SIZEOF_VOID_P > 0) ACCCHK_ASSERT(sizeof(void*) == SIZEOF_VOID_P)#endif#if (SIZEOF_CHAR_P > 0) ACCCHK_ASSERT(sizeof(char*) == SIZEOF_CHAR_P)#endif#if (ACC_HAVE_MM_HUGE_PTR) ACCCHK_ASSERT(4 == sizeof(void __huge*)) ACCCHK_ASSERT(4 == sizeof(char __huge*))#endif/*************************************************************************// check arithmetics**************************************************************************/ ACCCHK_ASSERT((((1u << 15) + 1) >> 15) == 1) ACCCHK_ASSERT((((1ul << 31) + 1) >> 31) == 1)#if (ACC_CC_TURBOC && (__TURBOC__ < 0x0150)) /* TC 1.0 bug, probably due to ACC_BROKEN_INTEGRAL_PROMOTION ?? */#else ACCCHK_ASSERT((1 << (8*SIZEOF_INT-1)) < 0)#endif ACCCHK_ASSERT((1u << (8*SIZEOF_INT-1)) > 0) ACCCHK_ASSERT((1l << (8*SIZEOF_LONG-1)) < 0) ACCCHK_ASSERT((1ul << (8*SIZEOF_LONG-1)) > 0)#if defined(acc_int32e_t) ACCCHK_ASSERT(sizeof(acc_int32e_t) == 4) ACCCHK_ASSERT(sizeof(acc_int32e_t) == SIZEOF_ACC_INT32E_T) ACCCHK_ASSERT(sizeof(acc_uint32e_t) == 4) ACCCHK_ASSERT(sizeof(acc_int32e_t) == sizeof(acc_uint32e_t)) ACCCHK_ASSERT_IS_SIGNED_T(acc_int32e_t) ACCCHK_ASSERT(((( (acc_int32e_t)1 << 30) + 1) >> 30) == 1) ACCCHK_ASSERT(((( ACC_INT32E_C(1) << 30) + 1) >> 30) == 1) ACCCHK_ASSERT_IS_UNSIGNED_T(acc_uint32e_t) ACCCHK_ASSERT(((( (acc_uint32e_t)1 << 31) + 1) >> 31) == 1) ACCCHK_ASSERT(((( ACC_UINT32E_C(1) << 31) + 1) >> 31) == 1) ACCCHK_ASSERT( (acc_int32e_t) (1 + ~(acc_int32e_t)0) == 0)#if defined(ACCCHK_CONFIG_PEDANTIC) /* compiler may warn about overflow */ ACCCHK_ASSERT( (acc_uint32e_t)(1 + ~(acc_uint32e_t)0) == 0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -