【发布时间】:2016-04-21 07:14:51
【问题描述】:
这是一个关于编程风格的问题,而不是关于技术性的问题: 我的 C 函数是否应该总是需要一个数组长度的参数,尽管该函数不依赖于它?
所以要么喜欢这个void foo(int* a, int size) 要么喜欢void foo(int* a)
例如当函数只操作数组的前 128 位时,该函数是否需要数组长度并且首先检查数组的长度是否正确,或者我应该相信调用者他遵循文档并且只使用数组的大小合适吗?
我是 C 新手,所以我担心可能会出现缓冲区溢出。为什么一个比另一个更好的技术推理会很棒。谢谢!
【问题讨论】:
-
不是强制性的,但如果你这样做,你的功能将更加模块化。
-
永远不要盲目相信程序员会做他们应该做的事情,所以是的;您应该始终在此类函数中添加长度。
-
以C库中的函数为例。他们提供了两种方法(例如
strcmpvs.strncmp)。一般来说,C 的哲学是“如果检查程序员知道他在做什么是有代价的,假设他是。”和“让程序员决定”。 -
C 是否像 C++ 一样使用
size_t?如果是这样,您应该将其用于第二个参数,而不是int。 -
@JDługosz
size_t起源于 C,正如在 C++ 中通过 C 标头<cstddef>访问它的事实所表明的那样,所以是的。然而,我怀疑它在 C 库中的使用与在 C++ 库中的强制/一致。不过,这是一个很好的做法!
标签: c arrays coding-style