bug fix : mutiline macro must use do{...}while(0)