Re: [OFFTOPIC] Re: A bit off-topic ... (fwd)

Marcin 'Qrczak' Kowalczyk (qrczak@knm.org.pl)
Fri, 2 Apr 1999 10:47:28 +0200 (CEST)


Thu, 1 Apr 1999, Alexander Viro pisze:

> ?: has *higher* priority than =.

Yes, but egcs-1.1.1/gcc/NEWS says that:

The parsing of expressions such as `a ? b : c = 1' has changed from
`(a ? b : c) = 1' to `a : b ? (c = 1)'.

I guess that this is because otherwise y ? x=1 : x=2 would mean
(y ? (x=1) : x) = 2.

?: is normally not l-value, but a gcc extension makes it an l-value when
both arguments are. = is always l-value. Standard compiler would give an
error, but gcc, blindly following priorities and allowing the extension,
would compile it the way that is not probably expected. So they swapped
the priorities when = is on the right side of ?:.

other compilers older gcc newer gcc

x=a?b:c x=(a?b:c) x=(a?b:c) x=(a?b:c)

a?x=b:c a?(x=b):c a?(x=b):c a?(x=b):c

a?b:x=c (a?b:x)=c (a?b:x)=c a?b:(x=c)
SEMANTIC ERROR

Although they use "incorrect" priorities here, they don't break correct
programs.

-- 
 __("<    Marcin Kowalczyk * qrczak@knm.org.pl http://kki.net.pl/qrczak/
 \__/       GCS/M d- s+:-- a22 C+++>+++$ UL++>++++$ P+++ L++>++++$ E->++
  ^^                W++ N+++ o? K? w(---) O? M- V? PS-- PE++ Y? PGP->+ t
QRCZAK                  5? X- R tv-- b+>++ DI D- G+ e>++++ h! r--%>++ y-

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/