繁体   English   中英

更好地在函数之间跳转或在函数之间传递值? C

[英]Better to jump between functions or pass values from function to function? C

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

例如,在我目前正在开发的游戏中,以struct game_structure作为包含所有数据的结构,是否最好在函数之间传递新的game_structures或将函数或多或少用作循环? 例如,当前,我调用了一个inventory(game_structure *gs)功能inventory(game_structure *gs) ,该功能遍历清单命令。 但是,完成后,它将启动功能game_loop(game_structure *gs); 回到游戏。 如果我有inventory(game_structure *gs)返回一个在其他地方调用的game_structure会更好吗?

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

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

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

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

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

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

这实际上取决于您在做什么以及所使用的编程语言。

在CI中,在重用结构和避免进行过多的递归操作(以避免炸毁堆栈)方面会犯错误。 毕竟,编写紧凑的代码和使用很少的内存是当今C的重点,而且mallocinc的东西也确实很烦人。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM