Le 28/03/2015 19:09, Jakub Jelinek a écrit :
> On Sat, Mar 28, 2015 at 12:36:31PM -0400, Henry So Jr. wrote:
>> I would like to change the #defines for ST_, TR_, NLBA_, etc. into
>> enums. This would make debugging easier. However, I have two concerns.
>>
>> Firstly, it changes the size of the structures (= more memory to compile
>> a score) unless I use the GCC __attribute__(packed) extension. Are we
>> targetting anything other than GCC? If so, does anyone know of a more
>> portable way of making enums smaller, or does that mean we switch to C++
>> to give enums a specific underlying type?
>
> Both C++ standard and GNU C extensions support enum bitfields, and you could
> use them conditionally.
> E.g. if using GCC (or other compiler that supports this), you would use enum
> bitfields, otherwise either use full enums and increase size, or use ints
> instead.
> GCC in itself used to use (before it switched to C++ which always supports
> this):
> #if defined(__GNUC__) && __GNUC__ >= 2
> #define ENUM_BITFIELD(TYPE) __extension__ enum TYPE
> #else
> #define ENUM_BITFIELD(TYPE) unsigned int
> #endif
> which is then used as:
> enum foobar { ..., F1, F2, F3, ... };
>
> struct bar {
> ...
> ENUM_BITFIELD (foobar) : 7;
> ...
> };
> (that is the second option). For supporting either enum bitfields, or
> full sized enums, you would need some macro that has the bitfield width
> as one of the arguments, and would expand either to that
> __extension__ enum TYPE : WIDTH
> or
> enum TYPE
That would be good... Clang apparently supports the __attribute__
(packed), but the condition would be useful for people wanting to
compile Gregorio on weird Windows compilers (Microsoft compilers, Open
Watcom, etc.).
> Note ISO C99 or C11 has inline support too
Good! Gregorio uses C99 so it shouln't be a problem.
Thank you,
--
Elie
_______________________________________________
Gregorio-devel mailing list
[email protected]
https://mail.gna.org/listinfo/gregorio-devel