[comp.std.c] Portable use of unions

davidsen@sixhub.UUCP (Wm E. Davidsen Jr) (12/05/89)

  I recently got a complaint that one of my programs was non-portable
and wouldn't run under a certain compiler. I isolated a tiny fragment
which causes the error message, and would like to know if anyone can
explain why this doesn't work other than the compiler being broken.

================ start code

  /* test of code generated for unions */
  
  char buf[30];		/* simple char buffer		*/
  
  union {
    int t_sscr;		/* subscript of location	*/
    char *t_adrs;		/* actual location		*/
  } demo;
  
  main() {
    demo.t_sscr = 4;
    demo.t_adrs = &buf[demo.t_sscr];
  }

================ end code

  The next to last line (2nd assignment) is flagged with a message of
"conflicting use of union fields in a single statement." I tried it on
seven common compilers and they all liked it. The int value of the union
holds the subscript of the start of the string, while the pointer value
will hold the actual starting address. Obviously only one can be valid
at any given time.

  I'm willing to be shown that there's a problem here, but only if
either K&R or ANSI says there is. I don't care if people have broken
compilers, that's their problem, right?
-- 
	bill davidsen - sysop *IX BBS and Public Access UNIX
davidsen@sixhub.uucp		...!uunet!crdgw1!sixhub!davidsen

"Getting old is bad, but it beats the hell out of the alternative" -anon