Re: Access to enum definition at run time

Yair Lenga via Gcc <[email protected]>
Newsgroups gmane.comp.gcc.devel
Message-ID <CAK3_KpMxrROcTWb3HOEOMZgK_ato0jXW37H_n5QXKhO4CajubA@mail.gmail.com>
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
>
>
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.