通常教授的标准数组大小宏是
#define ARRAYSIZE(arr) (sizeof(arr) / sizeof(arr[0]))
或者类似的阵型。然而,当一个指针被传入时,这种事情就会悄无声息地成功,并在运行时产生看似合理的结果,直到事情莫名其妙地崩溃。
这个错误太容易犯了: 一个具有本地数组变量的函数被重构,将一些数组操作移动到一个新函数中,该函数使用数组作为参数。
因此,问题是: 是否有一个“卫生的”宏来检测 C 语言中 ARRAYSIZE
宏的错误使用,最好是在编译时?在 C + + 中,我们只使用一个专门用于数组参数的模板; 在 C 中,我们似乎需要一些方法来区分数组和指针。(例如,如果我想拒绝数组,我只需要执行例如 (arr=arr, ...)
的操作,因为数组赋值是非法的)。