gotos

David Goodenough dg at lakart.UUCP
Tue Apr 26 02:52:56 AEST 1988


In article <2200 at louie.udel.EDU> new at udel.EDU (Darren New) writes:
>How about: (pseudocode)
>   for (i = 0; i < max_in_table && key != name[i]; ++i) 
>      if (keypressed()) goto handle_key;
>   seek(helpfile, offset[i]);
>   if (keypressed()) goto handle_key;
>   linecount = 0;
>   do {
>      read_line_from_file();
>      ++linecount;
>      if (keypressed()) goto handle_key;
>      if (read_line[0] == special_flag_char) goto handle_key;
>      insert_spaces_and_color_codes();
>      if (keypressed()) goto handle_key;
>      display_text_line();
>      if (keypressed()) goto handle_key;
>      } while (linecount < 24);
>   handle_key:
>   c = wait_for_key_then_read_it();
>   switch (c) {
>      case 'A': ...
>       ...
>      }

This is about the same:

    for (i = j = 0; i < max_in_table && key != name[i] && !j; ++i) 
	if (j = keypressed())
	    break;
    if (!j)
    {
	seek(helpfile, offset[i]);
	linecount = 0;
	while (!keypressed() && linecount < 24)
	{
	    read_line_from_file();
	    ++linecount;
	    if (keypressed() || read_line[0] == special_flag_char)
		break;
	    insert_spaces_and_color_codes();
	    if (keypressed())
		break;
	    display_text_line();
	}
    }
    c = wait_for_key_then_read_it();
    switch (c)
    {
	case 'A': ...
		...
    }

I grant that j could be renamed to (say) key_press_seen, but choice of
long / short variable names belongs in a whole different discussion.
However, I ask, where did all those goto's go to?? :-)

The ONLY time I use a goto is because C doesn't have a 'break 2' construct:

	for (;;)
	{
	    while (...)
	    {
		code .....

		if (condition)
		    break 2;
		
		more code .....
	    }
	}
	/* break 2 exits to here */

Maybe someone should suggest it to the ANSI crowd - it can't be that hard to do.
--
	dg at lakart.UUCP - David Goodenough		+---+
							| +-+-+
	....... !harvard!adelie!cfisun!lakart!dg	+-+-+ |
						  	  +---+



More information about the Comp.lang.c mailing list