Am 16.04.26 um 12:34 schrieb Kevin J. McCarthy:
On Thu, Apr 16, 2026 at 08:38:50AM +0200, Matthias Andree via Mutt-dev wrote:
Am 16.04.26 um 06:52 schrieb Kevin J. McCarthy:

So... I guess this is C23.  Which I know almost nothing about :-D.  In any case, we're a long ways away from getting to that level of C standard support in Mutt.

It's actually a C11 feature that is finally leveraged in the C23 stdlib.h, see https://en.cppreference.com/w/c/language/generic.html or https://stackoverflow.com/questions/9804371/syntax-and-sample-usage-of-generic-in-c11 or https://learn.microsoft.com/en-us/cpp/c-language/generic-selection?view=msvc-170

Thank you, Matthias.  Those links are really helpful.  Starts to turn line noise into something I can understand!


Hi Kevin,


My pleasure, glad to have helped -- and the "magic" is one major selling point for upgrading from C99 or older to at least C11 that I learned earlier today, and tells me the const correctness problem that fraught some of the stdlib.h functions is also a good reason to not wait for C23 for too long if you can assume up-to-date toolchains on the consumer side.

(I had been more focused on tackling C++ version differences in the 11/14/17/20 range migrations lately, I didn't follow C much, also because the type generic stuff in C99/C11 is most prominently documented in the tgmath.h area where a generic function name works for float, double, long double so you needn't mess with whether you need fabs for a double, fabsf for float or fabsl for long double... had missed that it would also help with the void * vs. const void *).

1. C23 CHANGES INCOMPATIBLY how a function _declaration_ without arguments is interpreted.

As of C23, int func() means the same as int func(void), must/will not take arguments, where C18 and before interpreted "has no prototype, any number of arguments is fine", although that had been deprecated since C99 or so.

It wasn't that long ago that I start converting some func() declarations inside mutt to func(void).  I'll count myself lucky that we didn't happen to have those kinds of problems in our configure.ac too!


Yep, that cleanup pretty much avoided the impenetrable "fails to compile on <moderndistro>" reports or "fails to compile on GCC15".

Cheers,
Matthias

Reply via email to