最好在函数之间跳转或从函数到函数传递值? C

时间:2012-03-16 03:46:18

标签: c function return

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

例如,在我正在进行的游戏中,结构game_structure作为包含所有数据的结构,最好在函数之间传递新的game_structures,或者更多地使用函数 - 或者更少作为循环?例如,目前,我调用函数inventory(game_structure *gs),它循环遍历库存命令。但是,当它完成时,它会启动返回游戏的函数game_loop(game_structure *gs);。如果我inventory(game_structure *gs)返回game_structure来调用其他地方会不会更好?

但即便在其他情况下,哪些更有益?在循环之间跳转或返回值?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

在C中,我会错误地重用结构并避免做太多递归的东西(以避免吹掉堆栈)。毕竟,编写严密的代码并使用少量内存是C现在的全部要点,并且mallocinc的东西也非常烦人。

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

答案 2 :(得分:0)

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

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

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

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