including a file

Frits van Bommel fvbommel at REMwOVExCAPSs.nl
Mon Nov 10 07:28:05 PST 2008


Christopher Wright wrote:
> Jarrett Billingsley wrote:
>> On Sun, Nov 9, 2008 at 10:18 PM, James <james at gmail.com> wrote:
>>> i created to include file, 1 with 'module xxx' declaration and the 
>>> other without it. but i still can import both files. what is the diff 
>>> here?
>>>
>>
>> Not a lot.  The module declaration doesn't serve much purpose.  The
>> only things I know it's used for is a place to attach documentation
>> for the module and as a way to make Rebuild shut up (it will whine
>> about the file that doesn't have the module declaration at the top).
>> Oh, and if you put an incorrect declaration on a module (say, it's
>> foo/bar.d but you put "module bar;" instead of "module foo.bar;"), the
>> compiler will sometimes barf.
>>
>> I really am not too sure what it's there for.
> 
> If your filename is not a legal identifier, you can make it compile 
> anyway by providing a module statement. I don't know how that works with 
> imports.

How it works with imports?
That's easy: it doesn't. :)
AFAIK there's no way to import modules except by filename, and import 
statements require valid module and package names.

Modules with illegal filenames can still be used for modules that are 
never imported though, such as a module with only special functions like 
main() or extern(<non-D>) functions that are re-declared elsewhere or 
implicitly used by the compiler for internal runtime calls[1].


[1]: An example of the latter kind is 
{phobos/internal,tango/lib/compiler/*}/invariant.d which uses a keyword 
as module name. (It also doesn't use a module statement, and for some 
reason the compiler doesn't complain about this...)


More information about the Digitalmars-d-learn mailing list