https://celery94.github.io/posts/024-refactoring-c-code--4-essential-techniques-simplified_cn/