Conditional Compilation Multiple Versions

Claude via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jan 6 05:44:37 PST 2017


On Friday, 6 January 2017 at 13:27:06 UTC, Mike Parker wrote:
> version(Windows)
>     enum bool WindowsSupported = true;
> else
>     enum bool WindowsSupported = false;

Well, yes, that was a bad example. I thought to change it before 
sending my post but I could find any other meaningful alternative.
My point was, that you can re-define WindowsSupported as a 
version even if it already defined, but not as an enum. And 
sometimes, you cannot simply use the else statement without 
creating another indented block (which seems a bit awkward).

> Yes, it works quite well for most use cases and should 
> generally be preferred. I disagree that it scales, though. At 
> some point (a point that is highly project-dependent), it 
> breaks down, requiring either very large modules or duplicated 
> versions across multiple modules.

Yes, in that case, you would probably break it down into several 
specialized config modules. I meant it forces you not to put 
directly version(Windows) into your code, but rather 
version(ThatFeatureSupportedByWindowsAmongstOtherOSs).

> My position is that I will always choose version blocks first, 
> but if I find myself in a situation where I have to choose 
> between duplicating version statements (e.g. version(A) 
> {version=AorB; version=AorC;}) across multiple modules and 
> restructuring my code to accommodate versioning, I much prefer 
> to use the enum alternative as an escape hatch.

Ok, that's interesting.
Do you have code samples where you do that? I'm just curious.


More information about the Digitalmars-d-learn mailing list