Is this a bug or illegal code?

Steven Schveighoffer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu May 29 08:02:48 PDT 2014


On Thu, 29 May 2014 10:45:28 -0400, safety0ff <safety0ff.dev at gmail.com>  
wrote:

> //******* CODE **********
> mixin("version = foo;");
> version(foo)
> {
> void main(){}	
> }
> //****** END CODE *******
> If it's illegal in D, what is the reason & where is documented?
>
> The reason I was considering such a construct is the following:
> Some C libraries have an associated "config.h" header that gets  
> generated when it is compiled.
> I was thinking it may be possible to parse these config.h files at  
> compile time (using text import) and convert some of the #define's into  
> "version = foo;"

Even if that is valid code, you are much better off using enums and static  
if.

enum includeSomeFeature = ...

static if(includeSomeFeature)
{
  ...
}

These work much more like #defines, and can be seen outside the module.

-Steve


More information about the Digitalmars-d-learn mailing list