wrap this macro with SAFE too, as this 

#define DO_HASH(ID, FUNC, SIZE)   SAFE(
   if(strcasecmp ....) {
} ) 

This requires all caller of this macro to supply ";" at the end. which is a good practice.