Workaround for foreward declaration ?
Jonathan M Davis
jmdavisProg at gmx.com
Sun Mar 3 07:00:57 PST 2013
On Sunday, March 03, 2013 15:39:38 Peter Sommerfeld wrote:
> According to http://dlang.org/ctod.html foreward declarations
> are not needed because functions can be defined in any order.
> But that seems not to be true for inner functions. A somewhat
> artificial example:
> -----------------------------
> import std.stdio;
>
> void main(string[] args){
> int count;
>
> // void foo() -- unlike in C in D not possible
>
> void bar(){
> ++count;
> writeln("bar");
>
> foo(); // ERROR: undefined identifier foo
> }
>
> void foo(){
> writeln("foo");
> if(count){
> writeln("foo again");
> return;
> }
>
> bar();
> }
>
> foo();
> }
> ---------------------------------------
>
> Is there a workaround for such a situation or do I have
> to put everything outside the enclosing function.
AFAIK, you have to put them outside for this. The order of both function calls
and import declarations matters inside of a function even though it doesn't
matter outside. In general, nested functions are more limited (e.g. if they're
templated, you can't instantiate them with different arguments - you only get
one instantation).
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list