use macro to define function prototype