是否有更安全的数组长度宏变体?

时间:2016-02-22 10:40:02

标签: c arrays pointers

获取数组长度的常规方法是使用sizeof(a)/sizeof(a[0]),例如:

for(j = 0; j < sizeof(a)/sizeof(a[0]); j++ )
    do_something_with(a[j]);

但是如果a只是一个指针,则存在风险:

int *a = calloc(1, sizeof(int));

for(j = 0; j = sizeof(a)/sizeof(a[0]); j++ )
    do_something_with(a[j]);

然后有人可能会循环两次这是不好的(如果你的幸运sizeof(int *)和sizeof(int)是相同的,它只会是一轮)。

有没有办法创建这个宏,如果a不是数组类型,它会失败?它需要失败的原因是,如果a不是一个数组,而是一个指针,那么确定向量的长度就没有安全的方法(当然sizeof(a)/sizeof(a[0])可能会导致绑定访问)。

0 个答案:

没有答案