Hi Paul,
`
> >> Hmm, given Bruno's recent point that C89 didn't require ?: support
> >> in constant expressions
> 
> I'm skeptical of that.  I can't find my copy of the official C89 standard,
> but the draft <http://flash-gordon.me.uk/ansi.c.txt> says that
> constant expressions can contain ?:.  In fact, the grammar in
> section 3.4 looks like this:
> 
>          constant-expression:
>                   conditional-expression
> 
> and until this discussion I've never heard of the claim that
> one cannot use ?: in constant expressions.

Indeed, I cannot find the references that I used on 2002-07-23 when I first
used this idiom in gettext/m4/gettext.m4.

- The book "C, A reference manual" by Harbison & Steele, section 7.11
  "Constant expressions", says: "The binary operators [...] may be used,
  as may the unary operators - ~ ! The conditional operator ? : may be used
  ... The original description of C did not mention that the operator ! is
  allowed in constant expressions, but this was obviously an oversight or
  typographical error."

- <http://www.srcf.ucam.org/~jsm28/gcc/const-exprs-issues.txt> mentions a
  couple of issues with constant expressions, but not with ? :.

Maybe I was confused about '? :' vs. the '!' issue. Maybe I tripped over a
GCC bug. But the GCC versions that were current in 2002 are outdated nowadays.
Or maybe I tripped over a vendor compiler bug.

> Given that (X ? 1 : -1) captures the concept more clearly than
> (2 * X - 1), we're better off using the former notation than
> the latter.

I agree now.

Bruno

Reply via email to