中年如何高效阅读代码?Linux大神拍了拍你并教给你这三个步骤( 四 )
3、现在看起来比较清爽了 , 但是仍然不够 , 因此我们进行第三轮精简 , 去掉各种调试和打印语句 , 还剩下52行:
int main(int argc, char *argv[]) { console_init() cpu_init() device_init() machine_init() timer_init() useremul_init() emuls = malloc(sizeof(struct emul *)) emuls[0] = emul_new(NULL) get_cmd_args(argc, argv, emuls[0], &diskimages, &n_diskimages) if (!skip_srandom_call) { gettimeofday(&tv, NULL) srandom(tv.tv_sec ^ getpid() ^ tv.tv_usec) } if (emuls[0]->machines[0]->machine_type == MACHINE_NONE) { n_emuls -- } else { for (i=0 i<n_diskimages i++) diskimage_add(emuls[0]->machines[0], diskimages[i]) } if (n_emuls > 0) { for (i=1 i<argc i++) if (argv[i][0] == "@") { exit(1) } emul_simple_init(emuls[0]) } for (i=1 i<argc i++) { if (argv[i][0] == "@") { if (strlen(s) == 0 && i+1 < argc && argv[i+1][0] != "@") { i++ s = argv[i] } n_emuls ++ emuls = realloc(emuls, sizeof(struct emul *) * n_emuls) console_allow_slaves(1) if (n_emuls == 1) { emul_destroy(emuls[0]) } emuls[n_emuls - 1] = emul_create_from_configfile(s) } } if (n_emuls == 0) { exit(1) } device_set_exit_on_error(0) console_warn_if_slaves_are_needed(1) emul_run(emuls, n_emuls) console_deinit() for (i=0 i<n_emuls i++) emul_destroy(emuls[i]) return 0}
4、一般来说 , 超过一屏的函数或多或少都会影响可读性 , 因此我们需要进行第四轮精简 , 去掉各种异常处理语句 , 还剩下43行:
int main(int argc, char *argv[]) { console_init() cpu_init() device_init() machine_init() timer_init() useremul_init() emuls = malloc(sizeof(struct emul *)) emuls[0] = emul_new(NULL) get_cmd_args(argc, argv, emuls[0], &diskimages, &n_diskimages) if (!skip_srandom_call) { gettimeofday(&tv, NULL) srandom(tv.tv_sec ^ getpid() ^ tv.tv_usec) } if (emuls[0]->machines[0]->machine_type == MACHINE_NONE) { n_emuls -- } else { for (i=0 i<n_diskimages i++) diskimage_add(emuls[0]->machines[0], diskimages[i]) } if (n_emuls > 0) { emul_simple_init(emuls[0]) } for (i=1 i<argc i++) { if (argv[i][0] == "@") { if (strlen(s) == 0 && i+1 < argc && argv[i+1][0] != "@") { i++ s = argv[i] } n_emuls ++ emuls = realloc(emuls, sizeof(struct emul *) * n_emuls) console_allow_slaves(1) if (n_emuls == 1) { emul_destroy(emuls[0]) } emuls[n_emuls - 1] = emul_create_from_configfile(s) } } emul_run(emuls, n_emuls) console_deinit() for (i=0 i<n_emuls i++) emul_destroy(emuls[i]) return 0}
对于一个熟练的开发者来说 , 该函数的逻辑精简到了这个状态以后已经比较清晰了(可以到此为止) 。 但如果是初次接触的话 , 还是相对显得有点复杂 。
5、让我们来进行第五轮精简 , 去掉那些不常用的、罕见的代码路径 , 剩下18行:
int main(int argc, char *argv[]) { console_init() cpu_init() device_init() machine_init() timer_init() useremul_init() emuls = malloc(sizeof(struct emul *)) emuls[0] = emul_new(NULL) get_cmd_args(argc, argv, emuls[0], &diskimages, &n_diskimages) for (i=0 i<n_diskimages i++) diskimage_add(emuls[0]->machines[0], diskimages[i]) if (n_emuls > 0) emul_simple_init(emuls[0]) emul_run(emuls, n_emuls) console_deinit() for (i=0 i<n_emuls i++) emul_destroy(emuls[i]) return 0}
推荐阅读
- 湖人队|扎心?一张图看湖人如何应对马赛克三分雨,神龟5米范围没人理他
- 搜狐新闻|准大学生数码三件套如何选?这些元气好物值得种草
- 想好好做医生的胖子|五十岁女性经常有周身无力和疼痛的困扰!该如何应对?医生告诉您
- 儿童饮食|秋冬季如何让宝宝爱上吃水果?稍微蒸一下美味翻倍,营养价值更高
- 队员|北极科考中“遭遇”北极熊,看科考队员如何与它们和谐相处
- 中国历史发展过程|中国历史发展过程!中国游戏外挂发展史:“辅助工具”是如何成长为“苍
- 金色年华录|都是男扮女装谈恋爱,《少女大人》比《女世子》如何?
- 上海市嘉定区人民政府网站|每年消耗3350吨蔬菜150吨肉,嘉定这家中央厨房如何践行“光盘行动”?
- 上海嘉定|如何让《民法典》走进群众心里?嘉定这些街镇和单位这样做
- 没蜡笔的小新|“整容脸”应该被鄙视吗?医生告诉你千篇一律的好看皮囊如何而来
