Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Other Discussions
  3. The Weird and The Wonderful
  4. OMG a "Goto"

OMG a "Goto"

Scheduled Pinned Locked Moved The Weird and The Wonderful
asp-netcomhelpquestion
42 Posts 21 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B BadKarma

    CPallini wrote:

    BTW I didn't know C# has goto statement, is there a reason to have it in such a language?

    A reason ? Maybe no, but you could need one if you use a switch.

    switch(iData)
    {
    case 0:
    case 1:
     // do stuff for 0 and 1
     break;
    case 2:
     // do stuff for 2
     goto 3;
    case 3:
     // do stuff for 2 and 3
     break;
    }
    

    Learn from the mistakes of others, you may not live long enough to make them all yourself.

    L Offline
    L Offline
    Lost User
    wrote on last edited by
    #9

    o really ?? i think it can be used like this : switch(iData) { case 0: case 1: // do stuff for 0 and 1 break; case 2: // do stuff for 2 case 3: // do stuff for 2 and 3 break; } if the break statement is missing, it go through next case ..

    VirtualVoid**.NET**

    C 1 Reply Last reply
    0
    • L Lost User

      o really ?? i think it can be used like this : switch(iData) { case 0: case 1: // do stuff for 0 and 1 break; case 2: // do stuff for 2 case 3: // do stuff for 2 and 3 break; } if the break statement is missing, it go through next case ..

      VirtualVoid**.NET**

      C Offline
      C Offline
      CPallini
      wrote on last edited by
      #10

      It is NOT C/C++, my friend, it is C# ;P

      Juraj Suchan wrote:

      case 0: case 1: // do stuff for 0 and 1 break;

      Fine: It is allowed.

      Juraj Suchan wrote:

      case 2: // do stuff for 2 case 3: // do stuff for 2 and 3 break;

      That's not allowed in C# (well, in fact, it is allowed as it stands, with just comments :-D ). :)

      If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
      This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
      [My articles]

      L 1 Reply Last reply
      0
      • C CPallini

        It is NOT C/C++, my friend, it is C# ;P

        Juraj Suchan wrote:

        case 0: case 1: // do stuff for 0 and 1 break;

        Fine: It is allowed.

        Juraj Suchan wrote:

        case 2: // do stuff for 2 case 3: // do stuff for 2 and 3 break;

        That's not allowed in C# (well, in fact, it is allowed as it stands, with just comments :-D ). :)

        If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
        This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
        [My articles]

        L Offline
        L Offline
        Lost User
        wrote on last edited by
        #11

        ou .. am I blind? :) sorry

        VirtualVoid**.NET**

        J 1 Reply Last reply
        0
        • C CPallini

          My 5, that code is pure Horror. Anyway (I made a test) the goto statement it is ininfluent. BTW I didn't know C# has goto statement, is there a reason to have it in such a language? :)

          If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
          This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
          [My articles]

          S Offline
          S Offline
          Super Lloyd
          wrote on last edited by
          #12

          I like this reason as well void foobar() { // blah blah blah for(...) { // blablabla for(..) { // foo foo foo if(bar) goto end; } } end: // beep bop a loola }

          A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.

          C T P A T 5 Replies Last reply
          0
          • S Super Lloyd

            I like this reason as well void foobar() { // blah blah blah for(...) { // blablabla for(..) { // foo foo foo if(bar) goto end; } } end: // beep bop a loola }

            A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.

            C Offline
            C Offline
            CPallini
            wrote on last edited by
            #13

            You may throw an exception for that. :)

            If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
            This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
            [My articles]

            R J 2 Replies Last reply
            0
            • S Super Lloyd

              I like this reason as well void foobar() { // blah blah blah for(...) { // blablabla for(..) { // foo foo foo if(bar) goto end; } } end: // beep bop a loola }

              A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.

              T Offline
              T Offline
              Thomas Weller 0
              wrote on last edited by
              #14

              A simple 'break' would do the job, no need for 'goto'... :^) Regards Thomas

              S R 2 Replies Last reply
              0
              • T Thomas Weller 0

                A simple 'break' would do the job, no need for 'goto'... :^) Regards Thomas

                S Offline
                S Offline
                Super Lloyd
                wrote on last edited by
                #15

                break will only break the inner most loop! C# is not java where you could have labelled loop...

                A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.

                T 1 Reply Last reply
                0
                • C CPallini

                  You may throw an exception for that. :)

                  If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                  This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                  [My articles]

                  R Offline
                  R Offline
                  Rob Grainger
                  wrote on last edited by
                  #16

                  That's a worse offense than a goto IMHO - exceptions should be reserved for exceptional conditions (the clues in the name) not used as an alternative control flow mechanism.

                  C A 2 Replies Last reply
                  0
                  • T Thomas Weller 0

                    A simple 'break' would do the job, no need for 'goto'... :^) Regards Thomas

                    R Offline
                    R Offline
                    Rob Grainger
                    wrote on last edited by
                    #17

                    Thomas Weller wrote:

                    A simple 'break' would do the job, no need for 'goto'...

                    Except that a break doesn't break out of two for loops, just the inner one - necessitating a flag to detect whether the outer loop should be exited too. In C# this seems a legitimate usage to me. I just wish C# had JavaScript's labelled loops/breaks, yielding the following code style:

                    outer_loop:
                    while (true) {
                    // .. do something
                    inner_loop:
                    while (true) {
                    // ...
                    if (condition1)
                    break inner_loop;

                            if (condition2)
                                break outer\_loop;
                        }
                    }
                    

                    Given that and fall-through in switch..case I see no need for goto.

                    C T 2 Replies Last reply
                    0
                    • R Rob Grainger

                      That's a worse offense than a goto IMHO - exceptions should be reserved for exceptional conditions (the clues in the name) not used as an alternative control flow mechanism.

                      C Offline
                      C Offline
                      CPallini
                      wrote on last edited by
                      #18

                      Rob Grainger wrote:

                      not used as an alternative control flow mechanism.

                      That's exactly what they are (IMHO). :-D

                      If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                      This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                      [My articles]

                      R 1 Reply Last reply
                      0
                      • R Rob Grainger

                        Thomas Weller wrote:

                        A simple 'break' would do the job, no need for 'goto'...

                        Except that a break doesn't break out of two for loops, just the inner one - necessitating a flag to detect whether the outer loop should be exited too. In C# this seems a legitimate usage to me. I just wish C# had JavaScript's labelled loops/breaks, yielding the following code style:

                        outer_loop:
                        while (true) {
                        // .. do something
                        inner_loop:
                        while (true) {
                        // ...
                        if (condition1)
                        break inner_loop;

                                if (condition2)
                                    break outer\_loop;
                            }
                        }
                        

                        Given that and fall-through in switch..case I see no need for goto.

                        C Offline
                        C Offline
                        CPallini
                        wrote on last edited by
                        #19

                        A 'labelled break' is a 'goto' alias. :)

                        If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                        This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                        [My articles]

                        1 Reply Last reply
                        0
                        • R Rob Grainger

                          Thomas Weller wrote:

                          A simple 'break' would do the job, no need for 'goto'...

                          Except that a break doesn't break out of two for loops, just the inner one - necessitating a flag to detect whether the outer loop should be exited too. In C# this seems a legitimate usage to me. I just wish C# had JavaScript's labelled loops/breaks, yielding the following code style:

                          outer_loop:
                          while (true) {
                          // .. do something
                          inner_loop:
                          while (true) {
                          // ...
                          if (condition1)
                          break inner_loop;

                                  if (condition2)
                                      break outer\_loop;
                              }
                          }
                          

                          Given that and fall-through in switch..case I see no need for goto.

                          T Offline
                          T Offline
                          Thomas Weller 0
                          wrote on last edited by
                          #20

                          What I mean is: a 'break' would be enough to execute the 'beep bop a loola' :-D ... By the way: I'd consider a 'flag' much better than a 'goto'... Regards Thomas

                          R 1 Reply Last reply
                          0
                          • S Super Lloyd

                            break will only break the inner most loop! C# is not java where you could have labelled loop...

                            A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.

                            T Offline
                            T Offline
                            Thomas Weller 0
                            wrote on last edited by
                            #21

                            I know. But in the pseudocode above it will definitely execute the 'beep bop a loola'... :-D Regards Thomas

                            J 1 Reply Last reply
                            0
                            • S Super Lloyd

                              I like this reason as well void foobar() { // blah blah blah for(...) { // blablabla for(..) { // foo foo foo if(bar) goto end; } } end: // beep bop a loola }

                              A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.

                              P Offline
                              P Offline
                              PIEBALDconsult
                              wrote on last edited by
                              #22

                              Add && !foo to the for loop conditions and/or use while instead.

                              1 Reply Last reply
                              0
                              • R Rob Grainger

                                That's a worse offense than a goto IMHO - exceptions should be reserved for exceptional conditions (the clues in the name) not used as an alternative control flow mechanism.

                                A Offline
                                A Offline
                                Andrew Rissing
                                wrote on last edited by
                                #23

                                I take exception to that remark! *Bypasses his finally block due to a goto statement*

                                1 Reply Last reply
                                0
                                • C CARPETBURNER

                                  protected void Page_Load(object sender, EventArgs e)
                                  {
                                  string str = "Even exception occur again in catch block still finally block is Working";
                                  try
                                  {
                                  throw new IndexOutOfRangeException();
                                  }
                                  catch
                                  {
                                  goto Hello;
                                  throw new IndexOutOfRangeException();

                                  }
                                  finally
                                  {
                                  Response.Redirect("Error.aspx?str="+ str);
                                  }
                                  Hello:
                                  Response.Write("Finally Skiped!");
                                  }

                                  http://www.codeproject.com/KB/aspnet/DotNetBulletQuestions.aspx?msg=2764693#xx2764693xx[^] A goto in a try/catch/finally block... urrrghh!

                                  A Offline
                                  A Offline
                                  Andrew Rissing
                                  wrote on last edited by
                                  #24

                                  Maybe someone was just trying to test something and forgot to yank out the code? One can dream right....

                                  P 1 Reply Last reply
                                  0
                                  • C CARPETBURNER

                                    protected void Page_Load(object sender, EventArgs e)
                                    {
                                    string str = "Even exception occur again in catch block still finally block is Working";
                                    try
                                    {
                                    throw new IndexOutOfRangeException();
                                    }
                                    catch
                                    {
                                    goto Hello;
                                    throw new IndexOutOfRangeException();

                                    }
                                    finally
                                    {
                                    Response.Redirect("Error.aspx?str="+ str);
                                    }
                                    Hello:
                                    Response.Write("Finally Skiped!");
                                    }

                                    http://www.codeproject.com/KB/aspnet/DotNetBulletQuestions.aspx?msg=2764693#xx2764693xx[^] A goto in a try/catch/finally block... urrrghh!

                                    P Offline
                                    P Offline
                                    Paul Conrad
                                    wrote on last edited by
                                    #25

                                    :wtf:

                                    "The clue train passed his station without stopping." - John Simmons / outlaw programmer "Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon "Not only do you continue to babble nonsense, you can't even correctly remember the nonsense you babbled just minutes ago." - Rob Graham

                                    1 Reply Last reply
                                    0
                                    • A Andrew Rissing

                                      Maybe someone was just trying to test something and forgot to yank out the code? One can dream right....

                                      P Offline
                                      P Offline
                                      PIEBALDconsult
                                      wrote on last edited by
                                      #26

                                      (You need to follow the link.)

                                      A 1 Reply Last reply
                                      0
                                      • P PIEBALDconsult

                                        (You need to follow the link.)

                                        A Offline
                                        A Offline
                                        Andrew Rissing
                                        wrote on last edited by
                                        #27

                                        Gotcha. ;D

                                        1 Reply Last reply
                                        0
                                        • C CPallini

                                          Rob Grainger wrote:

                                          not used as an alternative control flow mechanism.

                                          That's exactly what they are (IMHO). :-D

                                          If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                                          This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                                          [My articles]

                                          R Offline
                                          R Offline
                                          Rob Grainger
                                          wrote on last edited by
                                          #28

                                          CPallini wrote:

                                          That's exactly what they are (IMHO).

                                          Guess so, but the operative bit to my eyes is "alternative". Exceptions are much heavier weight than loop variables etc. in terms of the execution model. Enclosing code in try/catch involves manipulation of the stack frame, tracking exception-handling blocks and other devilry. Personally, if a condition can be anticipated, I consider it better to manage using traditional control flow mechanisms.

                                          C 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups