On Mon, Mar 21, 2016 at 03:14:48PM -0600, Eric Blake wrote: > On 03/09/2016 06:46 PM, Peter Xu wrote: > > > > Is this a grammar btw? > > Yes, C has an ugly grammar, because [] is just syntactic sugar for > deferencing pointer addition with nicer operator precedence. Quoting > C99 6.5.2.1: > > "The definition of the subscript operator [] is that E1[E2] is identical > to (*((E1)+(E2))). Because of the conversion rules that apply to the > binary + operator, if E1 is an array object (equivalently, a pointer to > the initial element of an array object) and E2 is an integer, E1[E2] > designates the E2-th element of E1 (counting from zero)." > > And a string literal is just a fancy way of writing the address of an > array of characters (where the address is chosen by the compiler). > > Thus, it IS valid to dereference the addition of an integer offset with > the address implied by a string literal in order to obtain a character > within the string. And since the [] operator is commutative (even > though no one in their right mind commutes the operands), you can also > write the even-uglier: > > composite["\n "] > > But now we've gone far astray from the original patch review :)
Interesting thing to know. Thanks. :) -- peterx