goto statement [moved]
-
It is generally considered wrong to use goto. This is because widespread use of goto resulted in unreadable "spaghetti" code, thanks to lazy programmers. Lot's of things act funny when goto's are around, such as OOP, side effects, type checking, etc. If used improperly, it can have very weird effects. That said, I've used goto statements for a long time in certain situations, because they were far more readable. For instance, instead of using a bunch of variables, conditionals, etc. to exit a program under certain circumstances, I would just use a goto. One line to one label. Done. (Note: I took care of cleanup and stuff too). However, I recently stopped using it for one reason: compilers can't optimize properly. In his great book "Write Great Code Vol. 2," Randall Hyde delves deep into how a program is transformed into assembler (i.e. processor instructions), and especially focuses on what effects certain tactics, data structures, and algorithms cause. He notes that, due to how compilers analyze your code, you want to keep it from "branching" (i.e. jump from line A to line B, like a conditional might) as much as possible. Goto's are so unpredictable and hard to analyze that they defeat the compiler's optimization technology. So, I might have used goto to make my program more efficient, but I lost the critical optimization phase, resulting in code that was slower. So, regardless of the religious wars about goto, there is one empirical consideration: if you want your compiler to generate the best code it can, don't use goto. (Hence, I bid farewell to the ever-useful construct) If you don't care about a possible performance loss, use it very carefully and sparingly. Also, watch your goto's whenever you update your source code: gotos' control flows can be disrupted, and your program could fail. -Nick P.
NimitySSJ wrote:
It is generally considered wrong to use goto. This is because widespread use of goto resulted in unreadable "spaghetti" code, thanks to lazy programmers.
Agreed, but from here on I have some problems:
NimitySSJ wrote:
Lot's of things act funny when goto's are around, such as OOP, side effects, type checking, etc.
This is preaching fire and brimstone - do it my way or else you will go to hell. I am not aware of any interaction of goto statements with OOP or type checking, that would be different to any other flow control statement.
NimitySSJ wrote:
However, I recently stopped using it for one reason: compilers can't optimize properly.
I doubt this as well - others have suggested reasons. However, the few times I have used goto statements (and it is nearly always the situation already mentioned - a function with complex flow control but needing common exit / cleanup code) I use it not for performance but to ensure the the accuracy of the logic and to minimize the chance of introducing bugs. In many applications these days, a few machine cycles is less important that reducing bugs. We need to teach the novices that all the features in the language are available and most have their place.
Peter "Until the invention of the computer, the machine gun was the device that enabled humans to make the most mistakes in the smallest amount of time."
-
Is it wrong to use goto into a program? Why? When?:)
36. When you surround an army, leave an outlet free. ... Do not press a desperate foe too hard. SUN-TZU - Art of War
Moved by Admin on Saturday, December 08, 2007 6:11:58 PM. This is not a programming question. This is a programming discussion
RomTibi wrote:
Is it wrong to use goto into a program? Why?
Never use
goto
statements if the language of your choice has higher level conditional constructs, such as "if" statements. The only time I would ever condone the use of a "goto" (or its equivalent) is if you're writing in IL. Even then, I still wouldn't recommend using the OpCodes.Br instruction :P -
RomTibi wrote:
Is it wrong to use goto into a program? Why?
Never use
goto
statements if the language of your choice has higher level conditional constructs, such as "if" statements. The only time I would ever condone the use of a "goto" (or its equivalent) is if you're writing in IL. Even then, I still wouldn't recommend using the OpCodes.Br instruction :PPhilip Laureano wrote:
I still wouldn't recommend using the OpCodes.Br instruction
I haven't seen a Visual Studio generated method yet without a silly BR.S inside; even in a Release build they typically end on something like:
IL_0013: /* 0B | */ stloc.1
IL_0014: /* 2B | 00 */ br.s IL_0016
IL_0016: /* 07 | */ ldloc.1
IL_0017: /* 2A | */ ret:)
Luc Pattyn [Forum Guidelines] [My Articles]
this months tips: - before you ask a question here, search CodeProject, then Google - the quality and detail of your question reflects on the effectiveness of the help you are likely to get - use PRE tags to preserve formatting when showing multi-line code snippets
-
Philip Laureano wrote:
I still wouldn't recommend using the OpCodes.Br instruction
I haven't seen a Visual Studio generated method yet without a silly BR.S inside; even in a Release build they typically end on something like:
IL_0013: /* 0B | */ stloc.1
IL_0014: /* 2B | 00 */ br.s IL_0016
IL_0016: /* 07 | */ ldloc.1
IL_0017: /* 2A | */ ret:)
Luc Pattyn [Forum Guidelines] [My Articles]
this months tips: - before you ask a question here, search CodeProject, then Google - the quality and detail of your question reflects on the effectiveness of the help you are likely to get - use PRE tags to preserve formatting when showing multi-line code snippets
I have written an experimental IL optimizer, your code would result it:
IL_0013: ret
:) It's main purpose is to inline LINQ methods and then optimize away the overhead of the delegate/anonymous method; but that's not finished yet. Unfortunately, I don't have the time to continue working on the optimizer, and the current version has some optimization bugs that can introduce subtle bugs in the optimized code.
-
I have written an experimental IL optimizer, your code would result it:
IL_0013: ret
:) It's main purpose is to inline LINQ methods and then optimize away the overhead of the delegate/anonymous method; but that's not finished yet. Unfortunately, I don't have the time to continue working on the optimizer, and the current version has some optimization bugs that can introduce subtle bugs in the optimized code.
Hi Daniel, an optimizer would be great to have built-in to Visual Studio's compilers I guess. I just recently started looking at MSIL code and I was not much impressed so far. Would Microsoft keep back on optimizing it because they rely on the JIT to optimize at its level anyway? BTW: can you tell me an easy way to look at native code, as generated by the JIT, on a program, say running from inside Visual Studio? Regards,
Luc Pattyn [Forum Guidelines] [My Articles]
this months tips: - before you ask a question here, search CodeProject, then Google - the quality and detail of your question reflects on the effectiveness of the help you are likely to get - use PRE tags to preserve formatting when showing multi-line code snippets
-
Is it wrong to use goto into a program? Why? When?:)
36. When you surround an army, leave an outlet free. ... Do not press a desperate foe too hard. SUN-TZU - Art of War
Moved by Admin on Saturday, December 08, 2007 6:11:58 PM. This is not a programming question. This is a programming discussion
Goto is normally discouraged because it violates a good program (control) flow and makes debugging/troubleshooting a bit difficult and sometimes a nightmare.
Vasudevan Deepak Kumar Personal Homepage
Tech Gossips
A pessimist sees only the dark side of the clouds, and mopes; a philosopher sees both sides, and shrugs; an optimist doesn't see the clouds at all - he's walking on them. --Leonard Louis Levinson -
:-D:laugh::-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.
see using goto makes your program less structured and makes use of no logic...it must be avoided
-
see using goto makes your program less structured and makes use of no logic...it must be avoided
Member 4691687 wrote:
using goto makes your program less structured
Maybe. But it really helps to rollback in particular circumstances.
Member 4691687 wrote:
nd makes use of no logic...
Nope. Program logic heavily relies to developer's one. :-D
Member 4691687 wrote:
it must be avoided
I don't like design dogmas. :)
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.
-
Yes, but not as wrong as asking a programming question in a non-programming forum.
How about if I try to help him out with this code sample I came across from someone who was apparently trying to avoid using a goto? I don't have access to the actual function anymore, but the basic idea went:
do { //some code here if ([condition]) break; //some more code here if ([condition]) break; //this goes on for awhile.... if ([condition]) break; // ... } while (false); // clean up code
-
Is it wrong to use goto into a program? Why? When?:)
36. When you surround an army, leave an outlet free. ... Do not press a desperate foe too hard. SUN-TZU - Art of War
Moved by Admin on Saturday, December 08, 2007 6:11:58 PM. This is not a programming question. This is a programming discussion
In the first programming course I had, the textbook described GOTO as "evil"! EEEEeeeEEEviiiil! :mad: If you used GOTO, GOSUB or global variables, you flunked. That was made clear from the beginning. If you used the three "G"'s, you had not understod functions and you failed the course. I have never used the three "G" ever since. I think it makes the code hard to read. I so hate spagetti code. A function has some input and generate some output. Very simple. No globals comming down from heaven above. Put them in the function parameters. If there are many parameters, just organize them in a struct. If there are lots of data (like a picture) make a pointer and call-by-reference. The only exeption is const Pi=3.14. That may be global, but only in the math module.
-
In fact, I use it outside the programs: "Goto hell!" is one of my favourite expressions. Am I wrong? :-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.
A thorough software professional is one who when his wife yells at him "goto hell", worries more about the goto. Get more here.[^] :laugh:
Luc Pattyn [Forum Guidelines] [My Articles]
Sorry for any delays in replying, I currently don't get e-mail notifications.
-
A thorough software professional is one who when his wife yells at him "goto hell", worries more about the goto. Get more here.[^] :laugh:
Luc Pattyn [Forum Guidelines] [My Articles]
Sorry for any delays in replying, I currently don't get e-mail notifications.
Luc Pattyn wrote:
A thorough software professional is one who when his wife yells at him "goto hell", worries more about the goto.
:-D :laugh: :-D Thank you so much :-D again
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.