引用代码片段:
/**
* list_add - add a new entry
* @new: new entry to be added
* @head: list head to add it after
*
* Insert a new entry after the specified head.
* This is good for implementing stacks.
*/
static inline void list_add(struct list_head *new, struct list_head *head)
{
__list_add(new, head, head->next);
}我在几个不同的程序中看到过类似的代码,特别是那些操纵数据结构的程序。添加这种额外级别的间接性通常的目的是什么-为什么不能将__list_add中的代码放在list_add中?
发布于 2009-08-07 09:24:44
如果你复制代码,会使维护变得更加困难。在这个例子中,额外的间接层隐藏了下一个参数。它将提供一个只有2个参数的函数,而不是3个。
如果复制__list_add()中的代码,则需要将其复制到多个位置。如果列表机制发生了一些改变,那么所有这些地方都需要更新,否则bug就会开始弹出(即,列表的FIFO和LIFO实现显示出不同的行为)。
总是需要权衡取舍;与重复代码行或在API中包含大量参数相反,另一种间接级别也会增加复杂性和可能的开销。
发布于 2009-08-07 09:21:35
这是关于代码重用,并避免重复。
__list_add()包含的代码在许多情况下都很有用,并且可以在几个不同的函数之间共享。
像这样共享代码有几个好处:
__list_add()中有一个bug,并且你修复了它,那么所有使用它的函数都会得到修复。__list_add()得到了增强(例如.你让它变得更快)当你想要查看项目是如何添加到列表中的时候,所有的函数都只有一个地方可以查看。发布于 2009-08-07 09:21:09
它可以。
但是,可能还有其他公共条目可以共享__list_add()中的代码。例如,可能有一个push()或insert_head()或类似的东西。
注意:如果这是C++,那么你可能需要重新考虑调用你的变量new,因为这是一个保留字。
https://stackoverflow.com/questions/1243774
复制相似问题