extern(C) enum
jmh530 via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Sep 15 19:04:56 UTC 2017
On Friday, 15 September 2017 at 18:20:06 UTC, Jonathan M Davis
wrote:
>
> It is my understanding that for both C and C++, an enum is
> always an int (unless you're talking about enum classes in
> C++). The size of an int can change based on your architecture,
> but AFAIK, all of the architectures supported by D guarantee it
> it be 32 bits in C/C++ (certainly, all of the architectures
> supported by dmd do), and druntime would have serious issues if
> it were otherwise, as it assumes all of the place that D's int
> is the same as C/C++'s int.
>
> It's certainly possible that my understanding of C/C++ enums is
> wrong, but if it is, you'd basically be screwed when dealing
> with any C functions that take an enum in any case that an enum
> wasn't 32 bits - especially if the C/C++ compiler could choose
> whatever size it wanted that fit the values.
>
> - Jonathan M Davis
Not to hijack the thread, but is there anything about enums that
can't be done with a struct? The code below is just a simple
example that I'm sure I could complicate unnecessarily to
re-create much of the behavior of current enums with the syntax
of std.tuple.
I suppose what I'm wondering how E.B below is treated in the
writeln. With an enum, it would be a manifest constant. Does
static initialization of the struct do the same thing?
struct Enum(T)
{
T A;
T B;
}
static Enum!int E = {A:0, B:1};
void main()
{
import std.stdio : writeln;
writeln(E.B);
}
More information about the Digitalmars-d-learn
mailing list