C中有标准函数会返回数组的长度吗?

C中有标准函数会返回数组的长度吗?
通常,其他答案中描述的技术被封装在宏中以使眼睛更容易。就像是:

#define COUNT_OF( arr) (sizeof(arr)/sizeof(0[arr]))

注意,上面的宏使用一个小的把戏将数组名称放在索引运算符(‘[]’中)而不是0的情况 – 这是为了在宏被错误地用于C代码中使用重载运算符[] ()。编译器会抱怨而不是给出不好的结果。

然而,还要注意,如果碰巧传递一个指针而不是一个数组,那么宏会默默地给出一个坏的结果 – 这是使用这种技术的主要问题之一。

我最近开始使用我从Google Chromium的代码库中偷走的更复杂的版本:

#define COUNT_OF(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x])))))

在这个版本中,如果一个指针被错误地作为参数传递,编译器会在某些情况下抱怨 – 特别是如果指针的大小不能被指针指向的对象的大小所占据。在这种情况下,除以零将导致编译器出错。实际上,我使用的至少一个编译器提供了一个警告,而不是一个错误 – 我不知道它对于其中除以零的表达式产生了什么。

那个宏没有关闭错误使用它的门,但它跟我在直线C中看到的一样接近。

如果您想在C工作时使用更安全的解决方案,请查看Compile time sizeof_array without using a macro,其中描述了Microsoft在winnt.h中使用的基于模板的方法。

http://stackoverflow.com/questions/1598773/is-there-a-standard-function-in-c-that-would-return-the-length-of-an-array

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:C中有标准函数会返回数组的长度吗?