From: Diederick C. N. <dc...@gm...> - 2011-09-05 05:05:17
|
Hi John and John, Seems this can go in too? https://sourceforge.net/tracker/?func=detail&aid=3383843&group_id=1032&atid=101032 Best, Dee |
From: John F. F. <joh...@cy...> - 2011-09-05 12:57:26
|
I was looking down the code modifications in "freeglut_gamemode.c" and found a series of ... (hide the children, ladies please cover your ears) ... "goto" statements in the C code. Gentlemen, for the record, this is an abomination. My heartfelt gratitude goes out to John Tsiombikas, who removed this pollution from our code base. I shudder to think of the time those statements spent in our library, with me oblivious to the arrow in our souls. Oh, and I've put the fix in. I added some parentheses as well. Thanks for pointing it out, Dee. - John On 9/5/2011 12:05 AM, Diederick C. Niehorster wrote: > Hi John and John, > > Seems this can go in too? > https://sourceforge.net/tracker/?func=detail&aid=3383843&group_id=1032&atid=101032 > > Best, > Dee > > ------------------------------------------------------------------------------ > Special Offer -- Download ArcSight Logger for FREE! > Finally, a world-class log management solution at an even better > price-free! And you'll get a free "Love Thy Logs" t-shirt when you > download Logger. Secure your free ArcSight Logger TODAY! > http://p.sf.net/sfu/arcsisghtdev2dev > _______________________________________________ > Freeglut-developer mailing list > Fre...@li... > https://lists.sourceforge.net/lists/listinfo/freeglut-developer > > > |
From: John T. <nu...@me...> - 2011-09-27 15:50:11
|
On Mon, Sep 05, 2011 at 07:56:25AM -0500, John F. Fay wrote: > I was looking down the code modifications in "freeglut_gamemode.c" and > found a series of ... (hide the children, ladies please cover your ears) > ... "goto" statements in the C code. > > Gentlemen, for the record, this is an abomination. My heartfelt > gratitude goes out to John Tsiombikas, who removed this pollution from > our code base. I shudder to think of the time those statements spent in > our library, with me oblivious to the arrow in our souls. Goto? OMG run for the hills! :) Thank you for your gratitude, but I don't share your disgust for goto :) I can't say I remember those gotos you mention and if they where nice or nasty. Obviously using gotos to jump all over the place and implement loops is really bad, but there are legit uses for gotos as well. Consider the following bit of pseudocode with and without gotos and you tell me which is more clear and less error-prone in maintenance: int init_without_goto(void) { if(init_a() == -1) { return -1; } if(init_b() == -1) { free_a(); return -1; } if(init_c() == -1) { free_a(); free_b(); return -1; } if(init_d() == -1) { free_a(); free_b(); free_c(); return -1; } if(init_e() == -1) { free_a(); free_b(); free_c(); free_d(); return -1; } return 0; } int init_with_goto(void) { if(init_a() == -1) goto err; if(init_b() == -1) goto err; if(init_c() == -1) goto err; if(init_d() == -1) goto err; if(init_e() == -1) goto err; return 0; err: free_a(); free_b(); free_c(); free_d(); return -1; } I'd say I prefer init_with_goto any day. -- John Tsiombikas http://nuclear.mutantstargoat.com/ |
From: Camilla B. <elm...@el...> - 2011-10-01 23:45:35
|
John Tsiombikas wrote: > Consider the following bit of pseudocode with and without gotos and you > tell me which is more clear and less error-prone in maintenance: > > int init_without_goto(void) > { > if(init_a() == -1) { > return -1; > } > if(init_b() == -1) { > free_a(); > return -1; > } > if(init_c() == -1) { > free_a(); > free_b(); > return -1; > } > if(init_d() == -1) { > free_a(); > free_b(); > free_c(); > return -1; > } > if(init_e() == -1) { > free_a(); > free_b(); > free_c(); > free_d(); > return -1; > } > return 0; > } > > > int init_with_goto(void) > { > if(init_a() == -1) > goto err; > if(init_b() == -1) > goto err; > if(init_c() == -1) > goto err; > if(init_d() == -1) > goto err; > if(init_e() == -1) > goto err; > return 0; > err: > free_a(); > free_b(); > free_c(); > free_d(); > return -1; > } > > I'd say I prefer init_with_goto any day. Faced with these options, I would choose goto as well. However, there is another alternative: int init_with_terminate(void) { if(init_a() == -1) { terminate(); return -1; } if(init_b() == -1) { terminate(); return -1; } if(init_c() == -1) { terminate(); return -1; } if(init_d() == -1) { terminate(); return -1; } if(init_e() == -1) { terminate(); return -1; } return 0; } void terminate(void) { free_a(); free_b(); free_c(); free_d(); } As a bonus, you can use `terminate' for regular shutdown as well. Regards, elmindreda |