西西河

主题:今天随便说两句,关于日本 -- 绝对不是白领

共:💬141 🌺742 🌵6
全看分页树展 · 主题 跟帖
家园 Linus Torvalds举出的好代码和坏代码的例子 -- 补充帖

https://github.com/mkirchner/linked-list-good-taste

第一版

void remove_cs101(IntList *l, IntListItem *target)

{

IntListItem *cur = l->head, *prev = NULL;

while (cur != target) {

prev = cur;

cur = cur->next;

}

if (prev) {

prev->next = cur->next;

} else {

l->head = cur->next;

}

}

第二版

void remove_elegant(IntList *l, IntListItem *target)

{

IntListItem **p = &l->head;

while ((*p) != target) {

p = &(*p)->next;

}

*p = target->next;

}

第一版中,删除第一个元素是一个特例,需要用if单独处理,但是第二版中通过使用指针消除了这个特例,变得更加一般化了。这种好代码不是光学好数学就能想出来的,因为做数学题并不需要使用指针(︶︹︺)

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河