Hi,
I'm writing code that works, but in such a nasty way...
Code:
typedef union Pixel
{
struct
{
unsigned bit0:1;
unsigned bit1:1;
unsigned bit2:1;
unsigned bit3:1;
unsigned bit4:1;
unsigned bit5:1;
unsigned bit6:1;
unsigned bit7:1;
} field;
unsigned ch:8;
} Pixel;
Then I initialize Pixels using px.field.bit0 = 0, px.field.bit1 = 1, ....
And I'd like to know if the standard allows me then, to compare two Pixels using the ch member of the union:
Code:
#include <string.h>
#include <stdio.h>
typedef union Pixel
{
struct
{
unsigned bit0:1;
unsigned bit1:1;
unsigned bit2:1;
unsigned bit3:1;
unsigned bit4:1;
unsigned bit5:1;
unsigned bit6:1;
unsigned bit7:1;
} field;
unsigned ch:8;
} Pixel;
int main()
{
Pixel p[3];
/* Initializing, using field.bitX */
p[0].field.bit0 = 1, p[0].field.bit1 = 0, p[0].field.bit2 = 1, p[0].field.bit3 = 1, p[0].field.bit4 = 1, p[0].field.bit5 = 1, p[0].field.bit6 = 1, p[0].field.bit7 = 1;
p[1].field.bit0 = 1, p[1].field.bit1 = 1, p[1].field.bit2 = 1, p[1].field.bit3 = 1, p[1].field.bit4 = 1, p[1].field.bit5 = 1, p[1].field.bit6 = 1, p[1].field.bit7 = 1;
p[2].field.bit0 = 1, p[2].field.bit1 = 0, p[2].field.bit2 = 1, p[2].field.bit3 = 1, p[2].field.bit4 = 1, p[2].field.bit5 = 1, p[2].field.bit6 = 1, p[2].field.bit7 = 1;
if (p[0].ch == p[1].ch)
{
puts("p[0] == p[1]");
}
if (p[0].ch == p[2].ch)
{
puts("p[0] == p[2]");
}
return 0;
}
As you see, I only use the "ch" part to compare two Pixels, it is never used to set a Pixel to some value.
I'm really afraid it may bug some day :s
Does the C99 standard allow me to do so?
Cheers.