This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

designated initializers extension and sparc


Hi,

Reading the text
-------------
In a structure initializer, specify the name of a field to initialize with `.fieldname =' before the element value. For example, given the following structure,
     struct point { int x, y; };
the following initialization
     struct point p = { .y = yvalue, .x = xvalue };
is equivalent to
     struct point p = { xvalue, yvalue };
Another syntax which has the same meaning, obsolete since GCC 2.5, is `fieldname:', as shown here:
     struct point p = { y: yvalue, x: xvalue };
The `[index]' or `.fieldname' is known as a designator. You can also use a designator (or the obsolete colon syntax) when initializing a union, to specify which element of the union should be used. For example,
     union foo { int i; double d; };
     union foo f = { .d = 4 };
will convert 4 to a double to store it in the union using the second element. By contrast, casting 4 to type union foo would store it into the union as the integer i, since it is an integer. (See Cast to Union.)
-------------
I wrote the following test:

union foo { int i; double d; };

int main(int argc, char **argv)
{
    union foo f = { .d = 4 };

    ASSERT_EQ(0, f.i);
    ASSERT_FEQ(4.0, f.d);

    return 0;
}

ASSERT_EQ and ASSERT_FEQ are some macros which checks the falue and gives some error messages.

It seems that this extension should be bi-endian, however it fails on the sparc.
What the problem with the test?

Sergey


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]