_countof 是 C
++
中计算一个固定大小数组长度的宏,比如:
T arr[ 10 ];
for ( size_t i = 0 ; i < _countof(arr); -- i ) do_something();
对于固定大小数组计算起来非常方便。
/* _countof helper */
#if !defined(_countof)
#if !defined(__cplusplus)
#define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0]))
#else
extern " C++ "
{
template < typename _CountofType, size_t _SizeOfArray >
char ( * __countof_helper(UNALIGNED _CountofType ( & _Array)[_SizeOfArray]))[_SizeOfArray];
#define _countof(_Array) sizeof(*__countof_helper(_Array))
}
#endif
#endif
用宏计算的方式容易理解,但是编译期语法检查不够严格。C ++ 中使用了比较严格的语法,确保传入的参数是固定数组。
C ++ 采用type_traits的方式来提取给定数组的信息,通过一个模板函数来完成这个操作:
__countof_helper(UNALIGNED _CountofType ( & _Array)[_SizeOfArray]) 函数来提取_Array的信息:
参数为_Array的引用,保证传入参数必须为固定数组,类型为_CountofType, 大小为_SizeofArray.
返回值为: char ( * Arr)[_SizeofArray];指向大小为_SizeofArray 的char类型的数组的指针。
T arr[ 10 ];
for ( size_t i = 0 ; i < _countof(arr); -- i ) do_something();
对于固定大小数组计算起来非常方便。
/* _countof helper */
#if !defined(_countof)
#if !defined(__cplusplus)
#define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0]))
#else
extern " C++ "
{
template < typename _CountofType, size_t _SizeOfArray >
char ( * __countof_helper(UNALIGNED _CountofType ( & _Array)[_SizeOfArray]))[_SizeOfArray];
#define _countof(_Array) sizeof(*__countof_helper(_Array))
}
#endif
#endif
用宏计算的方式容易理解,但是编译期语法检查不够严格。C ++ 中使用了比较严格的语法,确保传入的参数是固定数组。
C ++ 采用type_traits的方式来提取给定数组的信息,通过一个模板函数来完成这个操作:
__countof_helper(UNALIGNED _CountofType ( & _Array)[_SizeOfArray]) 函数来提取_Array的信息:
参数为_Array的引用,保证传入参数必须为固定数组,类型为_CountofType, 大小为_SizeofArray.
返回值为: char ( * Arr)[_SizeofArray];指向大小为_SizeofArray 的char类型的数组的指针。