通常讲授的标准数组大小宏是
#define ARRAYSIZE(arr) (sizeof(arr) / sizeof(arr[0]))
或某些等效形式。但是,当传入一个指针时,这种事情会悄无声息地成功,并且给出的结果在运行时看起来似乎是合理的,直到事情神秘地消失。
犯这样的错误太容易了:重构具有局部数组变量的函数,将数组操作的一部分移到以数组为参数的新函数中。
因此,问题是:是否存在“卫生的”宏来检测ARRAYSIZEC中宏的滥用,最好是在编译时?在C ++中,我们将仅使用专门用于数组参数的模板。在C语言中,似乎我们需要某种方式来区分数组和指针。(例如,如果我想拒绝数组,我会做例如(arr=arr, ...)因为数组分配是非法的)。
ITMISS
PIPIONE
相关分类