Glad to hear ! While C might never have full introspection or reflection as a "built-in" feature - a lot of benefits can be derived for exposing light-weight "reflection-like" data to reduce boilerplate code.
Yair On Thu, Apr 30, 2026 at 8:35 PM Martin Uecker <[email protected]> wrote: > > Am Donnerstag, dem 30.04.2026 um 16:14 +0200 schrieb Jakub Jelinek via Gcc: > > On Thu, Apr 30, 2026 at 04:54:02PM +0300, Yair Lenga wrote: > > > Thanks for taking the time. > > > My focus is on the C compiler. Assuming the enum "metadata" is stored > > > in a structure/variables that are readable by the program - can C > > > programs access it ? Does it apply to "C" enums, or only to "C++" enum > > > classes. > > > > Any kind of enum. > > It is roughly > > #include <meta> > > > > template <typename E> > > constexpr const char * > > enum_to_string (E v) > > { > > template for (constexpr auto e : std::define_static_array (enumerators_of > > (^^E))) > > if (v == [:e:]) > > return std::define_static_string (identifier_of (e)); > > return nullptr; > > } > > > > example of how it can be used: > > enum E { F, G, H } i; > > > > int > > main () > > { > > const char *f = enum_to_string (F); > > const char *g = enum_to_string (G); > > const char *h = enum_to_string (H); > > const char *j = enum_to_string (i); > > } > > Of course, if compiled with C++26 for use in C, one would need to > > wrap it in a wrapper, one per enum so that C can use it. > > Also, note the above function when not evaluated at compile time doesn't > > have a switch but a series of ifs, but e.g. GCC when optimizing ought to > > transform that into a switch and later perhaps into an array access or > > whatever is appropriate based on how dense the enumerals in the enumeration > > type are, how many etc. > > > > Jakub > > BTW: I often felt the need for a type-to-string serialization > builtin in C. This would be incredible useful for many things. > > > Martin > > > >
