Version very simple?
Steven Schveighoffer
schveiguy at yahoo.com
Sun Feb 27 07:14:16 PST 2011
On Sun, 27 Feb 2011 09:52:01 -0500, simendsjo <simen.endsjo at pandavre.com>
wrote:
> I'm having some problems grokking version.
>
> How would I translate this simple C macro?
> #if !defined(IDENT) || !defined(IDENT2)
>
> I've tried the following:
> version(!IDENT)
> > identifier or integer expected, not !
>
> !version(IDENT)
> > Declaration expected, not '!'
>
> version(IDENT || IDENT2)
> > found '||' when expecting ')'
>
> version(IDENT) || version(IDENT2)
> > Declaration expected, not '||'
>
>
> This is just plain ugly:
> version(IDENT) {
> } else {
> version = NOT_IDENT_OR_IDENT2;
> }
>
> version(IDENT2) {
> } else {
> version = NOT_IDENT_OR_IDENT2;
> }
>
> version(NOT_IDENT_OR_IDENT2) {
> // Finally
> }
The or can make things unnecessarily complex, and I've argued in the past
that version(x || y) should be allowed. It's sometimes awkward to try and
define a version that means x or y.
But here is essentially the way to do your thingy.
version(IDENT)
{
}
else version(IDENT2)
{
}
else
{
version=NOT_IDENT_OR_IDENT2;
}
version(NOT_IDENT_OR_IDENT2)
{
...
}
or if you only use this in one place, just put the ... inside the else
clause.
If you can help it, try to avoid versioning this way. Versioning should
use positive symbols, not negative ones. I still think an easier OR
clause would help quite a bit. The AND clause is pretty easy, just put
multiple version statements on the same line.
-Steve
More information about the Digitalmars-d-learn
mailing list