Thread overview | |||||
---|---|---|---|---|---|
|
March 03, 2013 Workaround for foreward declaration ? | ||||
---|---|---|---|---|
| ||||
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. Peter |
March 03, 2013 Re: Workaround for foreward declaration ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Peter Sommerfeld | 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
|
March 03, 2013 Re: Workaround for foreward declaration ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | Jonathan M Davis wrote:
> 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).
Thanks David! Should be mentioned somewhere though. Well, probably is,
somewhere ...
Peter
|
Copyright © 1999-2021 by the D Language Foundation