On Mon, Jun 2, 2025 at 7:29 AM Bruno Haible via Gnulib discussion list <bug-gnulib@gnu.org> wrote: > > Hi Alejandro, > > > I've added the _Countof to ISO C2y and GCC 16. Clang 21 has also added > > it. There's a <stdcountof.h> compiler header with a countof macro too. > > <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3550.pdf#subsubsection.0.6.5.4.5> > > <https://thephd.dev/the-big-array-size-survey-for-c> > > <https://thephd.dev/the-big-array-size-survey-for-c-results> > > <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117025> > > <https://github.com/llvm/llvm-project/issues/102836> > > Thanks for working on this. It's a nice addition, to not have to write > #define SIZEOF(a) (sizeof(a)/sizeof(a[0])) > in many places. > > > I see that gnulib uses the usual sizeof division often, so I was > > wondering if we should add the countof macro to gnulib with a fallback > > implementation when the system doesn't support it, and also use it > > within gnulib. > > I think we should do it, once the next version of ISO C is finalized. > > Why not already now? Because > > * The existing code > #define SIZEOF(a) (sizeof(a)/sizeof(a[0])) > will continue to work without problems. Thus, there is no hurry.
I believe this fails for pointers. See, for example, <https://voidnish.wordpress.com/2005/07/21/the-_countof-macro/>. > * The standards authors may still change their minds. > - We have seen ISO C changes even in the final stages of ISO C 23 > (remember the #b support?). > - The need for an extra header <stdcountof.h> is questionable, > because no existing code uses '_Countof' [1] and we have seen > how <stdbool.h> was introduced and later made redundant. > - How about the synchronization with ISO C++? I was disappointed to see > that code that uses 'unreachable' as defined by ISO C is not valid C++ > [2]. > > [1] https://codesearch.debian.net/search?q=%5Cb_Countof%5Cb&literal=0 > [2] https://lists.gnu.org/archive/html/bug-gnulib/2025-05/msg00263.html Jeff