> Perhaps a better fix is this:
>
>  struct Mem {
>    i64 i;
>    double r;
>    char *z;
>    int n;
>    u16 flags;
>    u8  type;
>    u8  enc;
>    void (*xDel)(void *);
>    union {
>      long double notUsed1;
>      char zShort[NBFS];
>    };
>  };
>
> The compiler would then (hopefully) insert an appropriate
> amount of padding prior to zShort so that it had the same
> alignment restructions as a long double.
>
> This approach uses an anonymous union, which I confess is
> a C construct that I have never in 22 years of C programming
> had the occasion to employ.  It seems to work well enough
> using gcc 3.3.4.  But down in my gut I have this nagging
> fealing that it will likely break on some compilers.
>

Well, it's supported by most compilers today, but I try to avoid
anonymous unions in C code as well. They are fairly standard for C++,
but not for C. But the approach seems fine to me - the alignment will
be forced in this case.

Reply via email to