switch vs. initializing declarations

Eyal Lebedinsky eyal at echo.canberra.edu.au
Sun Sep 16 18:18:28 AEST 1990


>In article <1990Sep14.204028.21189 at ingres.Ingres.COM> jeff at ingres.com (Jeff Anton) writes:
>A few days ago, it occured to me that I didn't have a good feeling
>as to what the following code fragment which seems to be legal C
>means.  This is a retorical question and is not real world code, but I
>would like to hear from someone who has a good knowledge of the
>formal C specifications.  Please reply to me personally as I don't
>often read comp.lang.c but post to comp.lang.c if you wish.
>
>main(argc, argv)
>int	argc;
>char	*argv[];
>{
>	switch (argc) {
>		int	v = 1;
>
>	default:
>		v += 5;
>	case 1:
>		printf("%d\n", v);
>	}
>	return 0;
>}
>
>
>The ambiguity is whether or not 'v' should be initialized or not.
>All compilers I've tested recognize the declaration but do not
>do the initialization.  Some report line 6 statement not reached when
>clearly the statement does have the declaritoy effect....
>
the 'switch' is like any goto. If you enter a block NOT through the
beginning then you cannot trust initialising code. It is generaly not
a good thing to do, and in the 'switch' statement you NEVER enter at
the begining, so don't initialize . If you insist on having an initialized
'v = 1' then make it external to the 'switch', maybe:

	{	int v = 1;
		switch (....) {
		...
		}
		return 0;
	}

Regards
	Eyal

-- 
Regards
	Eyal



More information about the Comp.lang.c mailing list