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