Equivalents to MSVC’s _countof in other compilers?

Using C++11, the non-macro form is:

char arrname[5];
size_t count = std::extent< decltype( arrname ) >::value;

And extent can be found in the type_traits header.

Or if you want it to look a bit nicer, wrap it in this:

template < typename T, size_t N >
size_t countof( T ( & arr )[ N ] )
{
    return std::extent< T[ N ] >::value;
}

And then it becomes:

char arrname[5];
size_t count = countof( arrname );

char arrtwo[5][6];
size_t count_fst_dim = countof( arrtwo );    // 5
size_t count_snd_dim = countof( arrtwo[0] ); // 6

Edit: I just noticed the “C” flag rather than “C++”. So if you’re here for C, please kindly ignore this post. Thanks.

Leave a Comment