Share Pastebin
Guest
Public paste!

redd12314512346346

By: a guest | Apr 16th, 2009 | Syntax: C | Size: 1.53 KB | Hits: 38 | Expires: Never
This paste has a previous version, view the difference. Copy text to clipboard
  1. /* Problem: Inefficient and confusing */
  2. int foo(int bar)
  3. {
  4.         int return_value = 0;
  5.         int doing_okay = 1;
  6.         doing_okay = do_something( bar );
  7.         if (doing_okay)
  8.         {
  9.                 doing_okay = init_stuff();
  10.         }
  11.         if (doing_okay)
  12.         {
  13.                 doing_okay = prepare_stuff();
  14.         }
  15.         if (doing_okay)
  16.         {
  17.                 return_value = do_the_thing( bar );
  18.         }
  19.         return return_value;
  20. }
  21.  
  22. /* Problem: Getting murdered by PHB's for using goto */
  23. int foo(int bar)
  24. {
  25.         if (!do_something( bar )) {
  26.                 goto error;
  27.         }
  28.         if (!init_stuff( bar )) {
  29.                 goto error;
  30.         }
  31.         if (!prepare_stuff( bar )) {
  32.                 goto error;
  33.         }
  34.         return do_the_thing( bar );
  35. error:
  36.         return 0;
  37. }
  38.  
  39. /* Problem: Too many nested blocks, horrible */
  40. int foo(int bar)
  41. {
  42.         int return_value = 0;
  43.         if (do_something( bar )) {
  44.                 if (init_stuff( bar )) {
  45.                         if (prepare_stuff( bar )) {
  46.                                 return_value = do_the_thing( bar );
  47.                          }
  48.                 }
  49.         }
  50.         return return_value;
  51. }
  52.  
  53. /* No obvious problems... */
  54. int foo(int bar)
  55. {
  56.     int return_value = 0;
  57.     do {
  58.         if (! do_something( bar )) break;
  59.         if (! init_stuff()) break;
  60.         if (! do_prepare_stuff()) break;
  61.         return_value = do_the_thing( bar );
  62.     } while (false);
  63.     return return_value;
  64. }