2012-03-16 78 views
1

我有一个简单的问题。在函数之间跳转或将函数中的值传递给函数通常更好?更好地跳转功能或将功能值传递给功能? C

例如,在我目前正在使用的结构中,结构game_structure作为包含所有数据的结构,是否最好在函数之间传递新的game_structures,或者使用函数或多或少作为循环?目前,例如,我称通过库存命令循环的功能inventory(game_structure *gs)。但是,完成后,它会启动功能game_loop(game_structure *gs);,然后返回游戏。如果我让inventory(game_structure *gs)返回game_structure在其他地方被调用,会更好吗?

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

+1

最好写简单容易的维护,而不是不可能扩展代码。除非出于更紧迫的原因不能这样做。 (我还没有找到任何*我的*工作。) – 2012-03-16 03:49:03

+0

我认为创建某种静态数据结构可能不是一个坏主意,非本地跳转破坏堆栈(不是真的,但..)。 – AoeAoe 2012-03-16 04:26:57

回答

1

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

0

这实际上取决于你在做什么以及你正在使用哪种编程语言。

在C中,我会错误地重复使用该结构,并避免做太多递归的东西(以避免吹出堆栈)。毕竟,编写严格的代码和使用小内存是现今C语言的重点,而mallocinc的东西实际上也很烦人。另一方面,如果我在Haskell中编程,我会在不可变的数据结构和大量的递归/尾递归方面犯错。

0

这是一个堆栈大小与对象复制的问题,我相信。

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

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

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