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

Répondre à