extern intended behavior?

Derek Parnell derek at psych.ward
Tue Jun 13 07:05:39 PDT 2006


On Tue, 13 Jun 2006 23:44:26 +1000, David Medlock <noone at nowhere.com>  
wrote:

> Look at the following source files(main.d and test.d):
>
> // main.d  ----------------------
> extern
> {
>    void MyFunction();
> }
>
> void main(char[][] args )
> {
>    MyFunction();
> }
>
>
> // test.d ----------------------
>
> import std.stdio;
>
> void MyFunction()
> {
>    writefln("Hello World");
> }
>
> compiles fine, but linker complains:
>   Error 42: Symbol Undefined _D4main10MyFunctionFZv
> --- errorlevel 1
>
>
> It appears the linker expects the extern function to be in the 'main'  
> module.  This appears to be incorrect behavior.

No its not. This is intentional.

> If it isn't why such a departure from a common C idiom(lex and yacc).

Don't know.

> Am I missing something?

Yes. The way to do this is D is that you also create another file  
'test.di' that contains ...

  // test.di --------------------
   void MyFunction();

And you modify main.d

  // main.d  ----------------------
  import test;
  void main(char[][] args )
  {
     MyFunction();
  }

Then you compile them as ...

   dmd -c test
   dmd main test.obj

-- 
Derek Parnell
Melbourne, Australia



More information about the Digitalmars-d mailing list