首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从func()到__func()的间接

从func()到__func()的间接
EN

Stack Overflow用户
提问于 2009-08-07 09:17:45
回答 8查看 195关注 0票数 1

引用代码片段:

代码语言:javascript
复制
/**
 * 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中?

EN

回答 8

Stack Overflow用户

发布于 2009-08-07 09:24:44

如果你复制代码,会使维护变得更加困难。在这个例子中,额外的间接层隐藏了下一个参数。它将提供一个只有2个参数的函数,而不是3个。

如果复制__list_add()中的代码,则需要将其复制到多个位置。如果列表机制发生了一些改变,那么所有这些地方都需要更新,否则bug就会开始弹出(即,列表的FIFO和LIFO实现显示出不同的行为)。

总是需要权衡取舍;与重复代码行或在API中包含大量参数相反,另一种间接级别也会增加复杂性和可能的开销。

票数 3
EN

Stack Overflow用户

发布于 2009-08-07 09:21:35

这是关于代码重用,并避免重复。

__list_add()包含的代码在许多情况下都很有用,并且可以在几个不同的函数之间共享。

像这样共享代码有几个好处:

  • 如果__list_add()中有一个bug,并且你修复了它,那么所有使用它的函数都会得到修复。
  • 如果__list_add()得到了增强(例如.你让它变得更快)当你想要查看项目是如何添加到列表中的时候,所有的函数都只有一个地方可以查看。
票数 2
EN

Stack Overflow用户

发布于 2009-08-07 09:21:09

它可以。

但是,可能还有其他公共条目可以共享__list_add()中的代码。例如,可能有一个push()insert_head()或类似的东西。

注意:如果这是C++,那么你可能需要重新考虑调用你的变量new,因为这是一个保留字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1243774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档