获取数组长度的常规方法是使用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])
可能会导致绑定访问)。