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. The Lounge
  3. Platform SDK documentation

Platform SDK documentation

Scheduled Pinned Locked Moved The Lounge
data-structurestutorialquestion
35 Posts 15 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.
  • G Offline
    G Offline
    Gizzo
    wrote on last edited by
    #1

    I've found this example (just look at SafeArrayGetElement) STDMETHODIMP CEnumPoint::Next( ULONG celt, VARIANT FAR rgvar[], ULONG * pceltFetched) { /// ... omited for(i = 0; i < celt; ++i){ // Are we at the last element? if(m_iCurrent == m_celts){ hresult = S_FALSE; goto LDone; } ix = m_iCurrent++; // m_psa is a global variable that holds the safe array. hresult = SafeArrayGetElement(m_psa, &ix, &rgvar[i]); if(FAILED(hresult)) goto LError0; } hresult = NOERROR; LDone:; if (pceltFetched != NULL) *pceltFetched = i; return hresult; LError0:; for(i = 0; i < celt; ++i) VariantClear(&rgvar[i]); return hresult; } goto LError0; :omg: goto LDone; :wtf: i've been shaking some minutes but now i'm ok goto Work; :~

    M G S E M 5 Replies Last reply
    0
    • G Gizzo

      I've found this example (just look at SafeArrayGetElement) STDMETHODIMP CEnumPoint::Next( ULONG celt, VARIANT FAR rgvar[], ULONG * pceltFetched) { /// ... omited for(i = 0; i < celt; ++i){ // Are we at the last element? if(m_iCurrent == m_celts){ hresult = S_FALSE; goto LDone; } ix = m_iCurrent++; // m_psa is a global variable that holds the safe array. hresult = SafeArrayGetElement(m_psa, &ix, &rgvar[i]); if(FAILED(hresult)) goto LError0; } hresult = NOERROR; LDone:; if (pceltFetched != NULL) *pceltFetched = i; return hresult; LError0:; for(i = 0; i < celt; ++i) VariantClear(&rgvar[i]); return hresult; } goto LError0; :omg: goto LDone; :wtf: i've been shaking some minutes but now i'm ok goto Work; :~

      M Offline
      M Offline
      Maxwell Chen
      wrote on last edited by
      #2

      Sometimes goto is still very light-weighted and useful comparing with try-throw-catch (and even -finally [MS specific]).


      Maxwell Chen

      G 1 Reply Last reply
      0
      • M Maxwell Chen

        Sometimes goto is still very light-weighted and useful comparing with try-throw-catch (and even -finally [MS specific]).


        Maxwell Chen

        G Offline
        G Offline
        Gizzo
        wrote on last edited by
        #3

        Now, i'm really shaking. ;P

        M 1 Reply Last reply
        0
        • G Gizzo

          Now, i'm really shaking. ;P

          M Offline
          M Offline
          Maxwell Chen
          wrote on last edited by
          #4

          Gizzo wrote:

          Now, i'm really shaking.

          :sigh:


          Maxwell Chen

          1 Reply Last reply
          0
          • G Gizzo

            I've found this example (just look at SafeArrayGetElement) STDMETHODIMP CEnumPoint::Next( ULONG celt, VARIANT FAR rgvar[], ULONG * pceltFetched) { /// ... omited for(i = 0; i < celt; ++i){ // Are we at the last element? if(m_iCurrent == m_celts){ hresult = S_FALSE; goto LDone; } ix = m_iCurrent++; // m_psa is a global variable that holds the safe array. hresult = SafeArrayGetElement(m_psa, &ix, &rgvar[i]); if(FAILED(hresult)) goto LError0; } hresult = NOERROR; LDone:; if (pceltFetched != NULL) *pceltFetched = i; return hresult; LError0:; for(i = 0; i < celt; ++i) VariantClear(&rgvar[i]); return hresult; } goto LError0; :omg: goto LDone; :wtf: i've been shaking some minutes but now i'm ok goto Work; :~

            G Offline
            G Offline
            Graham Bradshaw
            wrote on last edited by
            #5

            goto is only bad when used inappropriately - it makes it easy to write very unstructured code. Two things to consider: 1) Think about what a break or continue statement actually does 2) Look at the generated assembly language for any C/C++ code you write. You'll see a lot of JMP, JNZ and so on. What are those doing, if not a goto? In reality, you write a lot of goto statements, you just don't realise it.

            L G V 3 Replies Last reply
            0
            • G Graham Bradshaw

              goto is only bad when used inappropriately - it makes it easy to write very unstructured code. Two things to consider: 1) Think about what a break or continue statement actually does 2) Look at the generated assembly language for any C/C++ code you write. You'll see a lot of JMP, JNZ and so on. What are those doing, if not a goto? In reality, you write a lot of goto statements, you just don't realise it.

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

              Although there may be genuine reasons to use goto, it is still avoidable. A compiler generating Jump instructions cannot be considered as a valid reason for a programmer to use goto. After all, the main purpose of high level langauges is to make code writing, understanding, and maintaining easier. If not, we would all still be using assembly language. goto statements makes code difficult to understand, where as regular conditional expressions like if are better for a new developer to understand the code.

              1 Reply Last reply
              0
              • G Graham Bradshaw

                goto is only bad when used inappropriately - it makes it easy to write very unstructured code. Two things to consider: 1) Think about what a break or continue statement actually does 2) Look at the generated assembly language for any C/C++ code you write. You'll see a lot of JMP, JNZ and so on. What are those doing, if not a goto? In reality, you write a lot of goto statements, you just don't realise it.

                G Offline
                G Offline
                Gizzo
                wrote on last edited by
                #7

                Graham Bradshaw wrote:

                it makes it easy to write very unstructured code.

                I agreed with that. And i would add illegible, unmanageable...

                Graham Bradshaw wrote:

                break or continue

                break and continue (actually i don't use continue) don't make the code a mess. Someone who read the code can understand easily what it's going on. Write 4 or 5 gotos in any function and few people will understand it.

                Graham Bradshaw wrote:

                Look at the generated assembly language for any C/C++ code you write. You'll see a lot of JMP, JNZ and so on.

                IMO, that's one of the reasons high level languages were designed. BTW, my original post was only to make a "funny comment", but i'm really impressed. I'm thinking about posting a thread asking how many people use gotos. Since i started to learn programming i've been told that gotos are something like a sin.

                M 1 Reply Last reply
                0
                • G Gizzo

                  I've found this example (just look at SafeArrayGetElement) STDMETHODIMP CEnumPoint::Next( ULONG celt, VARIANT FAR rgvar[], ULONG * pceltFetched) { /// ... omited for(i = 0; i < celt; ++i){ // Are we at the last element? if(m_iCurrent == m_celts){ hresult = S_FALSE; goto LDone; } ix = m_iCurrent++; // m_psa is a global variable that holds the safe array. hresult = SafeArrayGetElement(m_psa, &ix, &rgvar[i]); if(FAILED(hresult)) goto LError0; } hresult = NOERROR; LDone:; if (pceltFetched != NULL) *pceltFetched = i; return hresult; LError0:; for(i = 0; i < celt; ++i) VariantClear(&rgvar[i]); return hresult; } goto LError0; :omg: goto LDone; :wtf: i've been shaking some minutes but now i'm ok goto Work; :~

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

                  In my current project I might have write, perhaps, 5 goto and 1 do {} while() It's hard sometimes, but I managed to get over it ... :laugh:

                  1 Reply Last reply
                  0
                  • G Gizzo

                    Graham Bradshaw wrote:

                    it makes it easy to write very unstructured code.

                    I agreed with that. And i would add illegible, unmanageable...

                    Graham Bradshaw wrote:

                    break or continue

                    break and continue (actually i don't use continue) don't make the code a mess. Someone who read the code can understand easily what it's going on. Write 4 or 5 gotos in any function and few people will understand it.

                    Graham Bradshaw wrote:

                    Look at the generated assembly language for any C/C++ code you write. You'll see a lot of JMP, JNZ and so on.

                    IMO, that's one of the reasons high level languages were designed. BTW, my original post was only to make a "funny comment", but i'm really impressed. I'm thinking about posting a thread asking how many people use gotos. Since i started to learn programming i've been told that gotos are something like a sin.

                    M Offline
                    M Offline
                    Mike Dimmick
                    wrote on last edited by
                    #9

                    Gizzo wrote:

                    Since i started to learn programming i've been told that gotos are something like a sin.

                    Yeah, you get that from professors and people who have their heads in the clouds. Gotos have a practical purpose - you should use them in any place where you can't use a regular control or looping construct. It's useful when you've got a lot of common cleanup-and-exit code in a function, which otherwise you'd have to either repeat or set a cleanup flag. Single-exit functions (all functions are now single-entry) are allegedly desirable according to the purists, but in my opinion inevitably lead to a forest of braces and deeply nested code. In languages that support it, you could use try/catch to implement a cleanup block by throwing an exception at the point that the error is detected. However, a try/catch is almost always much more expensive than a goto. Dijkstra's original 'GOTO considered harmful' paper was written at a time where the predominant languages did not include good control and looping constructs. Now they do. Use the goto sparingly, only where necessary - but don't subvert the control and looping constructs just to avoid a goto. Stability. What an interesting concept. -- Chris Maunder

                    G S 2 Replies Last reply
                    0
                    • G Gizzo

                      I've found this example (just look at SafeArrayGetElement) STDMETHODIMP CEnumPoint::Next( ULONG celt, VARIANT FAR rgvar[], ULONG * pceltFetched) { /// ... omited for(i = 0; i < celt; ++i){ // Are we at the last element? if(m_iCurrent == m_celts){ hresult = S_FALSE; goto LDone; } ix = m_iCurrent++; // m_psa is a global variable that holds the safe array. hresult = SafeArrayGetElement(m_psa, &ix, &rgvar[i]); if(FAILED(hresult)) goto LError0; } hresult = NOERROR; LDone:; if (pceltFetched != NULL) *pceltFetched = i; return hresult; LError0:; for(i = 0; i < celt; ++i) VariantClear(&rgvar[i]); return hresult; } goto LError0; :omg: goto LDone; :wtf: i've been shaking some minutes but now i'm ok goto Work; :~

                      E Offline
                      E Offline
                      Eytukan
                      wrote on last edited by
                      #10

                      Hey! Dont speak too bad about "goto"s. While you are coding, at some point you'll feel like, "Now how do I f*ck off from this block of code??:confused:". There it comes to the rescue like a spiderman :cool:.


                      --[V]--

                      [My Current Status]

                      S G 2 Replies Last reply
                      0
                      • G Graham Bradshaw

                        goto is only bad when used inappropriately - it makes it easy to write very unstructured code. Two things to consider: 1) Think about what a break or continue statement actually does 2) Look at the generated assembly language for any C/C++ code you write. You'll see a lot of JMP, JNZ and so on. What are those doing, if not a goto? In reality, you write a lot of goto statements, you just don't realise it.

                        V Offline
                        V Offline
                        V 0
                        wrote on last edited by
                        #11

                        Graham Bradshaw wrote:

                        1. Look at the generated assembly language for any C/C++ code you write. You'll see a lot of JMP, JNZ and so on. What are those doing, if not a goto?

                        But the compiler does that for you :-). I never use continue or goto and break only in switch statements, but idd as with all things, if you use it in a good way it can't do any harm :-) Coulda, woulda, shoulda doesn't matter if you don't. :beer:
                        :jig: :jig: :jig: :jig: :jig: :jig: :jig: :jig: :jig: :jig: :jig:

                        1 Reply Last reply
                        0
                        • E Eytukan

                          Hey! Dont speak too bad about "goto"s. While you are coding, at some point you'll feel like, "Now how do I f*ck off from this block of code??:confused:". There it comes to the rescue like a spiderman :cool:.


                          --[V]--

                          [My Current Status]

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

                          typically for() { for() { for() { if(condition) exit_all_for.... <= goto! ( except in java :cool: (which has labelled break)) } } }

                          E 1 Reply Last reply
                          0
                          • E Eytukan

                            Hey! Dont speak too bad about "goto"s. While you are coding, at some point you'll feel like, "Now how do I f*ck off from this block of code??:confused:". There it comes to the rescue like a spiderman :cool:.


                            --[V]--

                            [My Current Status]

                            G Offline
                            G Offline
                            Gizzo
                            wrote on last edited by
                            #13

                            VuNic wrote:

                            Now how do I f*ck off from this block of code??

                            return; return whatever; break; in some cases. (just when you are looking something within a loop) if i can't use one of the above sentences if because i did a bad work designing the code. Then, redesign and get a clearest code.

                            E 1 Reply Last reply
                            0
                            • G Gizzo

                              VuNic wrote:

                              Now how do I f*ck off from this block of code??

                              return; return whatever; break; in some cases. (just when you are looking something within a loop) if i can't use one of the above sentences if because i did a bad work designing the code. Then, redesign and get a clearest code.

                              E Offline
                              E Offline
                              Eytukan
                              wrote on last edited by
                              #14

                              yeah, with "breaks" the control can only "fall down", and not where we'd like to point to. But in some conditions, very rarely I had to use "goto" may be once in the entire program. But I agree, when I use it, I feel bit guilty :-D


                              --[V]--

                              [My Current Status]

                              L 1 Reply Last reply
                              0
                              • M Mike Dimmick

                                Gizzo wrote:

                                Since i started to learn programming i've been told that gotos are something like a sin.

                                Yeah, you get that from professors and people who have their heads in the clouds. Gotos have a practical purpose - you should use them in any place where you can't use a regular control or looping construct. It's useful when you've got a lot of common cleanup-and-exit code in a function, which otherwise you'd have to either repeat or set a cleanup flag. Single-exit functions (all functions are now single-entry) are allegedly desirable according to the purists, but in my opinion inevitably lead to a forest of braces and deeply nested code. In languages that support it, you could use try/catch to implement a cleanup block by throwing an exception at the point that the error is detected. However, a try/catch is almost always much more expensive than a goto. Dijkstra's original 'GOTO considered harmful' paper was written at a time where the predominant languages did not include good control and looping constructs. Now they do. Use the goto sparingly, only where necessary - but don't subvert the control and looping constructs just to avoid a goto. Stability. What an interesting concept. -- Chris Maunder

                                G Offline
                                G Offline
                                Gizzo
                                wrote on last edited by
                                #15

                                Probably i'm going to ask the stupid question of the thread, but... What has to do try/catch with goto? Can the goto statement catch an exception?

                                C 1 Reply Last reply
                                0
                                • S Super Lloyd

                                  typically for() { for() { for() { if(condition) exit_all_for.... <= goto! ( except in java :cool: (which has labelled break)) } } }

                                  E Offline
                                  E Offline
                                  Eytukan
                                  wrote on last edited by
                                  #16

                                  Super Lloyd wrote:

                                  labelled break

                                  Is it?? so it's an implicit "goto" right??


                                  --[V]--

                                  [My Current Status]

                                  S 1 Reply Last reply
                                  0
                                  • E Eytukan

                                    Super Lloyd wrote:

                                    labelled break

                                    Is it?? so it's an implicit "goto" right??


                                    --[V]--

                                    [My Current Status]

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

                                    it is. but "goto shy" people prefer it as it is "more structured"

                                    1 Reply Last reply
                                    0
                                    • M Mike Dimmick

                                      Gizzo wrote:

                                      Since i started to learn programming i've been told that gotos are something like a sin.

                                      Yeah, you get that from professors and people who have their heads in the clouds. Gotos have a practical purpose - you should use them in any place where you can't use a regular control or looping construct. It's useful when you've got a lot of common cleanup-and-exit code in a function, which otherwise you'd have to either repeat or set a cleanup flag. Single-exit functions (all functions are now single-entry) are allegedly desirable according to the purists, but in my opinion inevitably lead to a forest of braces and deeply nested code. In languages that support it, you could use try/catch to implement a cleanup block by throwing an exception at the point that the error is detected. However, a try/catch is almost always much more expensive than a goto. Dijkstra's original 'GOTO considered harmful' paper was written at a time where the predominant languages did not include good control and looping constructs. Now they do. Use the goto sparingly, only where necessary - but don't subvert the control and looping constructs just to avoid a goto. Stability. What an interesting concept. -- Chris Maunder

                                      S Offline
                                      S Offline
                                      S Senthil Kumar
                                      wrote on last edited by
                                      #18

                                      Mike Dimmick wrote:

                                      Single-exit functions (all functions are now single-entry) are allegedly desirable according to the purists, but in my opinion inevitably lead to a forest of braces and deeply nested code.

                                      Can't agree with you more. While I admit the concept of a single exit is good, going to great lengths to do that, when a immediate return would be more appropriate, is very bad IMO. Also, I find that single exit methods make me hold a lot more context in my head than those that return immediately. Regards Senthil _____________________________ My Blog | My Articles | WinMacro

                                      L 1 Reply Last reply
                                      0
                                      • S S Senthil Kumar

                                        Mike Dimmick wrote:

                                        Single-exit functions (all functions are now single-entry) are allegedly desirable according to the purists, but in my opinion inevitably lead to a forest of braces and deeply nested code.

                                        Can't agree with you more. While I admit the concept of a single exit is good, going to great lengths to do that, when a immediate return would be more appropriate, is very bad IMO. Also, I find that single exit methods make me hold a lot more context in my head than those that return immediately. Regards Senthil _____________________________ My Blog | My Articles | WinMacro

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

                                        Again, the answer is maintenance. I don't agree with rigid rules, but, if you should consider whether your code will be understood by people maintaining it. If you have numerous exit points in a function, then maybe the function is doing too much :).

                                        S R 2 Replies Last reply
                                        0
                                        • E Eytukan

                                          yeah, with "breaks" the control can only "fall down", and not where we'd like to point to. But in some conditions, very rarely I had to use "goto" may be once in the entire program. But I agree, when I use it, I feel bit guilty :-D


                                          --[V]--

                                          [My Current Status]

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

                                          goto gives you freedom. When freedom is misused, you get chaos. Maybe, MS programmers are very adventerous. . . .resulting in all their bug troubles.

                                          M 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