Coding styles
1. Do not use typedef for the struct
2. Use newline curly brace after function prototype
3. Re-define macros with do { x } while(0)