On Mon, 2011-05-02, Yellow wrote: > Hyrum K Wright wrote on Mon, May 02, 2011 at 15:00:45 -0500: > > On Mon, May 2, 2011 at 2:52 PM, Greg Stein <gst...@gmail.com> wrote: > > > On Mon, May 2, 2011 at 10:55, <hwri...@apache.org> wrote: > > >> Log: > > >> Use our "typical" function call syntax when using function pointers in > > >> the > > >> delta editor. > > >> > > >> One of the things that has always puzzled me is why (*func_ptr)(args) and > > >> func_ptr(args) are equivalent. While this remains an enigma, I much > > >> prefer > > >> the consistency offered by using the same syntax throughout our code > > >> base, > > >> and since this appears to be the odd file out, it get's the change. > > > > > > I use the (*foo->bar)(...) form because the operator precedence and > > > binding is clearer. foo->bar(...) kind seems like bar(..) is getting > > > called, then something weird is going on with foo->. Yes, it is true > > > that foo->$result does not make sense, BUT: the brain recognizes that > > > *after* parsing bar(...) first. So when you see code like this, your > > > brain does a two-step. It just isn't smooth reading. Thus, the use of > > > (*foo->bar)(...). There is no pause in the brain's parsing of what is > > > actually happening there. > > > > > > My preference would be to revert this change, to keep the previous > > > readability. We've generally allowed slight style variances as long as > > > a single file is consistent. > > > > Fine by me, though I've never noticed the mental do-si-do you describe > > above. At the end of the day it's just a bikeshed, so I'll give it a > > bit to allow others to weigh in. > > There is a third option: (foo->bar)(...).
The only pertinent commentary I can find on this topic is a note in the C Rationale: section 3.3.2.2 for C89 <http://www.lysator.liu.se/c/rat/c3.html#3-3-2-2> or the same thing in section 6.5.2.2 for C99 (see <http://www.open-std.org/jtc1/sc22/wg14/>). We have all three styles in the code base, and some rough searching yields the following counts: $ grep -i -- "->[a-z_][a-z0-9_]*(" subversion/{*,*/*}/*.c 926 # foo->bar(...) $ grep -i -- "^[^*]*->[a-z_][a-z0-9_]*)(" subversion/{*,*/*}/*.c 46 # (foo->bar)(...) $ grep -i -- "^[^*]*\*.*->[a-z_][a-z0-9_]*)(" subversion/{*,*/*}/*.c 98 # (*foo->bar)(...) and it looks like we have a broadly similar spread of function pointer calling styles where there is no "struct->" dereferencing going on. FWIW, personally I prefer the foo->bar(...) style. - Julian