1 // © 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 3 /* 4 ****************************************************************************** 5 * 6 * Copyright (C) 2002-2011, International Business Machines 7 * Corporation and others. All Rights Reserved. 8 * 9 ****************************************************************************** 10 * 11 * File uassert.h 12 * 13 * Contains the U_ASSERT and UPRV_UNREACHABLE macros 14 * 15 ****************************************************************************** 16 */ 17 #ifndef U_ASSERT_H 18 #define U_ASSERT_H 19 20 /* utypes.h is included to get the proper define for uint8_t */ 21 #include "unicode/utypes.h" 22 /* for abort */ 23 #include <stdlib.h> 24 25 /** 26 * \def U_ASSERT 27 * By default, U_ASSERT just wraps the C library assert macro. 28 * By changing the definition here, the assert behavior for ICU can be changed 29 * without affecting other non - ICU uses of the C library assert(). 30 */ 31 #if U_DEBUG 32 # include <assert.h> 33 # define U_ASSERT(exp) assert(exp) 34 #elif U_CPLUSPLUS_VERSION 35 # define U_ASSERT(exp) (void)0 36 #else 37 # define U_ASSERT(exp) 38 #endif 39 40 /** 41 * \def UPRV_UNREACHABLE 42 * This macro is used to unconditionally abort if unreachable code is ever executed. 43 * @internal 44 */ 45 #if defined(UPRV_UNREACHABLE) 46 // Use the predefined value. 47 #else 48 # define UPRV_UNREACHABLE abort() 49 #endif 50 51 #endif 52