g++-4.0.3: program output is different when compiled with -O3 (did not happen with gcc-3.4.5)

Erik freeciv@home.se
Wed May 17 16:10:00 GMT 2006


Peter Doerfler wrote:

> Never mind this approach. Now sizeof(foo) is 12 instead of 4 as it was 
> before, which is probably not acceptable for most applications. I 
> guess it's either compile without strict compliance or use the 
> __extension__ workaround and make sure all the compilers you want to 
> use on your code know what to do. Such a thing as an anonymous struct 
> simply doesn't seem to exist in the Standard.

The following seems to work with -Wextra -pedantic, although it uses 
accessors, which require a lot of changes to the code that uses Coords:
typedef signed short Sint16;
typedef unsigned int Uint32;
struct Coords {
    Coords(const int X, const int Y) {parts.x = X, parts.y = Y;}
    bool operator<(const Coords other) const {return all < other.all;}
    signed short int get_x() const {return parts.x;}
    signed short int get_y() const {return parts.y;}
    void set_x(const Sint16 X) {parts.x = X;}
    void set_y(const Sint16 Y) {parts.y = Y;}
    union {
        struct {Sint16 x, y;} parts;
        Uint32 all;
    };
};



More information about the Gcc-help mailing list