【问题标题】:Better to jump between functions or pass values from function to function? C更好地在函数之间跳转或在函数之间传递值? C
【发布时间】:2012-03-16 03:46:18
【问题描述】:

我有一个简单的问题。在函数之间跳转或在函数之间传递值通常更好吗?

例如,在我目前正在开发的游戏中,以结构体game_structure 作为包含所有数据的结构体,是在函数之间传递新的game_structures 更好,还是使用函数more-or-少循环?目前,例如,我调用函数inventory(game_structure *gs) 循环通过库存命令。然而,当它完成时,它会启动函数game_loop(game_structure *gs);,这会回到游戏中。如果我让inventory(game_structure *gs) 返回一个game_structure 以便在其他地方被调用会更好吗?

但即使在其他情况下,还有什么更有益的呢?在循环之间跳转,还是返回值?

【问题讨论】:

  • 最好写简单易维护且不可能扩展的代码。除非出于更紧迫的原因无法做到这一点。 (我还没有在 我的 作品中找到任何东西。)
  • 我认为为此创建某种静态数据结构可能不是一个坏主意,非本地跳转会破坏堆栈(不是真的,但是..)。

标签: c function return


【解决方案1】:

我认为,如果程序流以程序方式构建(如果可能的话),它有助于可维护性。因此,当调用者不关心被调用函数的结果时,在函数末尾调用另一个函数会使事情变得不必要地复杂化。在我的代码中,我尽量减少不必要的调用嵌套和递归。在维护代码时,它让您的生活变得更简单。

【讨论】:

    【解决方案2】:

    这真的取决于你在做什么以及你使用什么编程语言。

    在 C 语言中,我会在重用结构和避免做太多递归的事情(以避免破坏堆栈)方面犯错。毕竟,编写紧凑的代码和使用很少的内存是当今 C 语言的重点,而 mallocinc 的东西也很烦人。

    另一方面,如果我在 Haskell 中进行编程,我会在不可变数据结构和大量递归/尾递归方面犯错。

    【讨论】:

      【解决方案3】:

      我相信这是堆栈大小与对象副本的问题。

      特别是对于 C,将值或引用传递给其他函数。这不仅保持逻辑,而且在几乎所有情况下都是正确的方法。

      如果您在return 语句中调用另一个函数,则不会破坏原始堆栈,而是为新函数创建一个新堆栈。这样做时,在函数跳转期间,对象将被复制或移动到新堆栈以进行操作。虽然依赖于编译器,但不能保证被“移动”,因此这与将对象按值传递给函数以及堆栈溢出的可能性相同。

      如果您真的多次关心大对象复制,一个更好的做法是将对象声明为在其生命范围内的全局静态对象。在调用函数时,传递对象的引用。不过有一个问题。访问内存时需要格外小心,因为数据可能会被无意更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-24
        • 2020-09-26
        • 1970-01-01
        • 2019-11-13
        • 2018-04-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多