21 #ifndef _freetds_macros_h_ 22 #define _freetds_macros_h_ 24 #ifndef _freetds_config_h_ 25 #error should include config.h before 32 #define TDS_ZERO_FREE(x) do {free((x)); (x) = NULL;} while(0) 33 #define TDS_VECTOR_SIZE(x) (sizeof(x)/sizeof(x[0])) 36 #define TDS_OFFSET(type, field) offsetof(type, field) 38 #define TDS_OFFSET(type, field) (((char*)&((type*)0)->field)-((char*)0)) 41 #if ENABLE_EXTRA_CHECKS 42 # if defined(__GNUC__) && __GNUC__ >= 2 43 # define TDS_COMPILE_CHECK(name,check) \ 44 extern int name[(check)?1:-1] __attribute__ ((unused)) 46 # define TDS_COMPILE_CHECK(name,check) \ 47 extern int name[(check)?1:-1] 49 # define TDS_EXTRA_CHECK(stmt) stmt 51 # define TDS_COMPILE_CHECK(name,check) \ 52 extern int disabled_check_##name 53 # define TDS_EXTRA_CHECK(stmt) 56 #if defined(__GNUC__) && __GNUC__ >= 3 57 # define TDS_LIKELY(x) __builtin_expect(!!(x), 1) 58 # define TDS_UNLIKELY(x) __builtin_expect(!!(x), 0) 60 # define TDS_LIKELY(x) (x) 61 # define TDS_UNLIKELY(x) (x) 64 #if ENABLE_EXTRA_CHECKS && defined(__GNUC__) && __GNUC__ >= 4 65 #define TDS_WUR __attribute__ ((__warn_unused_result__))