Advertisement
Guest User

Untitled

a guest
Apr 16th, 2009
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.63 KB | None | 0 0
  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.                 doing_okay = init_stuff();
  9.         } else {
  10.                 cleanup_1();
  11.         }
  12.         if (doing_okay) {
  13.                 doing_okay = prepare_stuff();
  14.         } else {
  15.                 cleanup_2();
  16.         }
  17.         if (doing_okay) {
  18.                 return_value = do_the_thing( bar );
  19.         } else {
  20.                 cleanup_3();
  21.         }
  22.         return return_value;
  23. }
  24.  
  25. /* Problem: Getting murdered by PHB's for using goto */
  26. int foo(int bar)
  27. {
  28.         if (!do_something( bar )) {
  29.                 goto error_1;
  30.         }
  31.         if (!init_stuff( bar )) {
  32.                 goto error_2;
  33.         }
  34.         if (!prepare_stuff( bar )) {
  35.                 goto error_3;
  36.         }
  37.         return do_the_thing( bar );
  38. error_1:
  39.     cleanup_1();
  40.         return 0;
  41. error_2:
  42.     cleanup_2();
  43.         return 0;
  44. error_3:
  45.     cleanup_3();
  46.         return 0;
  47. }
  48.  
  49. /* Problem: Too many nested blocks, horrible */
  50. int foo(int bar)
  51. {
  52.         int return_value = 0;
  53.         if (do_something( bar )) {
  54.                 if (init_stuff( bar )) {
  55.                         if (prepare_stuff( bar )) {
  56.                                 return_value = do_the_thing( bar );
  57.                         } else {
  58.                                 cleanup_3();
  59.                         }
  60.                 } else {
  61.                         cleanup_2();
  62.                 }
  63.         } else {
  64.               cleanup_1();
  65.         }
  66.         return return_value;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement