How compiler detects forward reference errors
Lodovico Giaretta via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Sep 3 07:13:27 PDT 2016
On Saturday, 3 September 2016 at 14:06:06 UTC, Igor wrote:
> Can anyone explain in plain English how does compiler process
> and detect a "test.d(6) Error: forward reference of variable a"
> in following code:
>
> import std.stdio;
>
> enum a = 1 + b;
> enum d = 5 + a; // No error here
> enum b = 12 + c;
> enum c = 10 + a; // error here
>
> void main()
> {
> writeln("Hello World!", b);
> }
a needs b to be initialized. So b must be initialized before a.
Let's write this b->a. Now b needs c. So c->b. c needs a, so
a->c. If we sum everything, we have that a->c->b->a. This mean
that to initialize a we need b, to initialize b we need c, but to
initialize c we need a. So to initialize a we need a, which is
not possible. We need a before having initialized it.
On the other hand, a->d is not a problem, as d can be initialized
after a.
More information about the Digitalmars-d-learn
mailing list