Version very simple?

simendsjo simen.endsjo at pandavre.com
Sun Feb 27 07:29:32 PST 2011


On 27.02.2011 16:14, Steven Schveighoffer wrote:
> 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

Your version is a bit simpler, but it's still confusing. I'm porting a c 
header, so I won't try to D-ify it.


More information about the Digitalmars-d-learn mailing list