Impressed

Alex Rønne Petersen alex at lycus.org
Thu Jul 26 21:36:57 PDT 2012


On 27-07-2012 05:32, Ali Çehreli wrote:
> On 07/26/2012 06:58 PM, Stuart wrote:
>  > On Friday, 27 July 2012 at 00:23:54 UTC, Ali Çehreli wrote:
>
>  > Well, kinda. "Goto case" and such are one thing, but allowing the
>  > arbitrary use of goto for jumping around from label to label.... I just
>  > don't understand why the language even supports this.
>
> Unlike C++, the language disallows unsafe jumping forward (or is it dmd
> that disallows it?). Hmmm... Maybe I am wrong... (?) I swear, the
> following code used to generate a compilation error:
>
>      if (aCondition) {
>          goto label;    // Jumps over s's constructor call
>      }
>
>      auto s = S(7);
>
> label:
>
>      s.foo();
>
> The error used to say:
>
>    "Error: cannot goto forward into different try block level."
>
> The code is allowed by dmd 2.059.
>
> The code is allowed for classes as well but of course there is a
> segmentation faault due to foo() on the null object. Strange...
>
>  > Anyone using 'goto
>  > label' in their code is doing it wrong. Period.
>
> I agree.
>
> Ali
>

Jumping over initialization isn't as problematic in D because variables 
are guaranteed to have a default initialization value (if not 
initialized to void). It's worse in languages like C where the value of 
variables would be undefined.

-- 
Alex Rønne Petersen
alex at lycus.org
http://lycus.org


More information about the Digitalmars-d mailing list