【发布时间】:2020-10-06 13:12:15
【问题描述】:
我必须编写一个有 600 多行和大约 25 个函数的 C 程序。这是我写过的最长的 C 代码。
我注意到有些函数有超过 5 个参数。从 main() 直接调用的参数更多。离main()越远,越少。
我还注意到,我经常必须将参数传递给函数,不是因为该函数直接使用该参数,而是该函数调用了另一个需要该参数的函数。
所以它看起来像
void f1(int a, int b,..., int bar){
int foo = f2(bar); // the only time 'bar' is used in f1
.
.
.
}
我试图尽量减少全局变量的使用,但我不得不声明一些全局变量,因为一些参数变得太多余了。基本上我必须将这些参数传递给每个函数。
我不是一个有经验的程序员,但是当我用 Java 编程时,我认为我不需要编写一个参数超过 5 个的方法。
在 C 中传递比其他语言更多的参数是否正常?它只是过程编程与 OOP 的本质吗?还是我只是写了糟糕的 C 代码?
【问题讨论】:
-
如果你想让你的函数签名/调用更简洁,你可以传递一个
struct。 -
不,只是一些(许多:))语言隐式地采用“对象”参数,即您没有在代码中明确指定它,但它仍然存在。如果您将数据组织在结构中(这样您就可以一起传递一些参数),您应该不会看到很大的(任何)差异。
-
@FiddlingBits 哦,我知道使用
struct会有什么帮助。谢谢。 -
@Al.G.好的谢谢你。如果我是正确的,那么在 C 中唯一可以做到这一点的数据结构是
struct?我会尝试更频繁地使用struct。 -
顺便说一句,您使用了省略号:
...,这在 C(和 C++)中很重要,因为您的第二个参数使它成为 variadic function 原型,允许从一个,到许多相同类型的重复参数。在您的问题的背景下,这当然不是您要传达的意思。 :)
标签: c function arguments procedural-programming