From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46910) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aiBgX-0005Xo-Lf for qemu-devel@nongnu.org; Mon, 21 Mar 2016 22:04:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aiBgW-0003ND-Q2 for qemu-devel@nongnu.org; Mon, 21 Mar 2016 22:04:41 -0400 Date: Tue, 22 Mar 2016 10:04:18 +0800 From: Peter Xu Message-ID: <20160322020418.GC4468@pxdev.xzpeter.org> References: <1457502997-30904-1-git-send-email-peterx@redhat.com> <1457502997-30904-2-git-send-email-peterx@redhat.com> <56E0A02B.50102@redhat.com> <20160310014625.GE4091@pxdev.xzpeter.org> <56F06448.50308@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <56F06448.50308@redhat.com> Subject: Re: [Qemu-devel] [PATCH 1/2] block/qapi: make two printf() formats literal List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Blake Cc: kwolf@redhat.com, pbonzini@redhat.com, qemu-devel@nongnu.org, qemu-block@nongnu.org, armbru@redhat.com 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