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

Reply via email to