Hi,
I compiled the structure below an compiled with g++ and received an
immediate error (not a warning).

hello.c:11: error: declaration of `char main()::<anonymous
struct>::<anonymous union>::c'
hello.c:10: error: conflicts with previous declaration `int
main()::<anonymous struct>::<anonymous union>::c'

--- In [email protected], "John Matthews" <jm5...@...> wrote:
>
> --- In [email protected], "Tyler Littlefield" <tyler@> wrote:
> >
> > so here's the question. Whose buying it for me? <wink>
> 
> :-)
> 
> Last week a bug was discovered in the code I work on (not in my area).
> Some of our message types use anonymous unions, which have the
> interesting property that 2 fields at different offsets within a
> structure and even of different types can have the same name. The bug
> was similar to:
> 
> struct {
>     union { int i; int c; }; /* first c */
>     union { char c; }; /* second c */
> } s;
> 
> int main(void) {
>     s.c = 'X'; /* Bug!! Assigned to int c, should be char c */
>     return 0;
> }
> 
> This compiles with no warnings under gcc using -Wall to enable 'all'
> warnings. PC-Lint first warns that you are using anonymous unions,
> then points out that the reference to s.c is (logically) ambiguous.
> 
> Unfortunately PC-Lint wasn't being used. I don't know how long it took
> to spot and how many test engineers were involved in trying to find
> it, but it doesn't take many engineer hours to exceed the price of one
> copy of PC-Lint.
>


Reply via email to