Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #141961

Re: Remembering C's operator precedence rules

From Ben Bacarisse <ben.usenet@bsb.me.uk>
Newsgroups comp.lang.c
Subject Re: Remembering C's operator precedence rules
Date 2019-03-14 16:39 +0000
Organization A noiseless patient Spider
Message-ID <87bm2d76lu.fsf@bsb.me.uk> (permalink)
References (1 earlier) <1bh8cb93bi.fsf@pfeifferfamily.net> <86sgvqr96y.fsf@mailhub.linuxsc.com> <eg5olf-gk.ln1@gangtai.home.grep.be> <getp20Ffe1gU1@mid.individual.net> <VMsiE.8585$q55.1681@fx42.iad>

Show all headers | View raw


scott@slp53.sl.home (Scott Lurndal) writes:

> Ian Collins <ian-news@hotmail.com> writes:
>>On 14/03/2019 09:24, Wouter Verhelst wrote:
>>> On 13/03/2019 19:11, Tim Rentsch wrote:
>>>> Joe Pfeiffer <pfeiffer@cs.nmsu.edu> writes:
>>>>> [...], and if I don't remember for sure in my own code
>>>>
>>>> It isn't hard to remember if one makes an effort to learn.
>>>> Fifteen to thiry minutes, tops, and that's a one-time cost.
>>> 
>>> When I was taught C in college, we had to memorize the operator
>>> precedence. I tried, I really did. It's not "fifteen to thirty minutes,
>>> tops". It took me several hours. I have forgotten most of that since.
>>
>>I just memorised the page number (48) in K&R...
>
> I just use parenthesis to obtain the required precedence.  It is subsequently
> unmistakable as to what the intent was.

I hop you won't mind my saying that that's not a very interesting
answer!  Everyone does that because you have to sometimes.  The
interesting question is when, exactly when, you would add /redundant/
parentheses.  I am pretty sure you don't add them to

  x = y + 1

  z = -sin(theta)

  1 + l/2

  -b + sqrt(b*b - 4*a*c)

(but do say if you would).  Here are some others in what I imagine is
increasing order of the likelihood of your feeling the need for more
parentheses:

  if (a < b && b < c) ...

  if (cp < end - 1 && *cp != 0) ...

  if (cp == end || cp < end-1 && *cp != 0) ...

  if (cp < end-1 && *cp != 0 || cp == end) ...

  return *ret_code = NO_SUCH_FILE, ptr;

  fp = file_exists(name) ? fopen(name, "r") : stdin;

  result = process(file) || log_error();

  result = process(file) && tidy_up() || log_error();

  if (1 << n > limit) ...

  1 << w-1 & bits

(Yes, two of the ifs have the || swapped -- I think it make a difference
to some people but I'm not sure.)  Do you feel they need some ()s?

There's another side to this question -- would you have added redundant
parentheses to these if you were writing these from scratch?  I know
it's hard to answer that having just seem them all without, but writing
code when you are not sure is quite different to reading it when you
can, at least provisionally, assume that the code means something
sane.

-- 
Ben.

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Remembering C's operator precedence rules Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-03-09 16:53 +0000
  Re: Remembering C's operator precedence rules Richard Damon <Richard@Damon-Family.org> - 2019-03-09 15:21 -0500
    Re: Remembering C's operator precedence rules Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-03-09 21:41 +0000
  Re: Remembering C's operator precedence rules Keith Thompson <kst-u@mib.org> - 2019-03-09 12:32 -0800
    Re: Remembering C's operator precedence rules Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-03-09 21:21 +0000
      Re: Remembering C's operator precedence rules Richard Damon <Richard@Damon-Family.org> - 2019-03-09 16:42 -0500
        Re: Remembering C's operator precedence rules "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2019-03-09 14:01 -0800
      Re: Remembering C's operator precedence rules Keith Thompson <kst-u@mib.org> - 2019-03-09 14:17 -0800
        Re: Remembering C's operator precedence rules Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-03-10 00:42 +0000
  Re: Remembering C's operator precedence rules Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2019-03-09 13:54 -0700
    Re: Remembering C's operator precedence rules Bart <bc@freeuk.com> - 2019-03-09 21:37 +0000
      Re: Remembering C's operator precedence rules Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-03-09 22:01 +0000
      Re: Remembering C's operator precedence rules Richard Damon <Richard@Damon-Family.org> - 2019-03-09 18:59 -0500
        Re: Remembering C's operator precedence rules Tim Rentsch <tr.17687@z991.linuxsc.com> - 2019-03-13 09:26 -0700
    Re: Remembering C's operator precedence rules Tim Rentsch <tr.17687@z991.linuxsc.com> - 2019-03-13 10:11 -0700
      Re: Remembering C's operator precedence rules Bart <bc@freeuk.com> - 2019-03-13 17:40 +0000
        Re: Remembering C's operator precedence rules Keith Thompson <kst-u@mib.org> - 2019-03-13 15:24 -0700
          Re: Remembering C's operator precedence rules Bart <bc@freeuk.com> - 2019-03-13 23:43 +0000
            Re: Remembering C's operator precedence rules Keith Thompson <kst-u@mib.org> - 2019-03-13 17:43 -0700
        Re: Remembering C's operator precedence rules Tim Rentsch <tr.17687@z991.linuxsc.com> - 2019-03-18 08:53 -0700
      Re: Remembering C's operator precedence rules Wouter Verhelst <w@uter.be> - 2019-03-13 22:24 +0200
        Re: Remembering C's operator precedence rules Tim Rentsch <tr.17687@z991.linuxsc.com> - 2019-03-13 14:06 -0700
        Re: Remembering C's operator precedence rules Ian Collins <ian-news@hotmail.com> - 2019-03-14 14:28 +1300
          Re: Remembering C's operator precedence rules scott@slp53.sl.home (Scott Lurndal) - 2019-03-14 13:35 +0000
            Re: Remembering C's operator precedence rules Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2019-03-14 06:55 -0700
            Re: Remembering C's operator precedence rules Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-03-14 16:39 +0000
              Re: Remembering C's operator precedence rules scott@slp53.sl.home (Scott Lurndal) - 2019-03-14 17:37 +0000
                Re: Remembering C's operator precedence rules Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-03-14 20:42 +0000
              Re: Remembering C's operator precedence rules Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2019-03-14 10:42 -0700
                Re: Remembering C's operator precedence rules Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-03-14 23:08 +0000
                Re: Remembering C's operator precedence rules Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2019-03-15 02:53 -0700
                Re: Remembering C's operator precedence rules Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2019-03-15 17:52 -0600
  Re: Remembering C's operator precedence rules Tim Rentsch <tr.17687@z991.linuxsc.com> - 2019-03-13 12:56 -0700
  Re: Remembering C's operator precedence rules Jens Stuckelberger <Jens_Stuckelberger@nowhere.net> - 2019-03-13 20:14 +0000
  Re: Remembering C's operator precedence rules fir <profesor.fir@gmail.com> - 2019-03-19 14:17 -0700

csiph-web