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


Groups > comp.lang.c > #141967

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 20:42 +0000
Organization A noiseless patient Spider
Message-ID <875zsl6vcz.fsf@bsb.me.uk> (permalink)
References (3 earlier) <eg5olf-gk.ln1@gangtai.home.grep.be> <getp20Ffe1gU1@mid.individual.net> <VMsiE.8585$q55.1681@fx42.iad> <87bm2d76lu.fsf@bsb.me.uk> <2jwiE.76034$O65.74368@fx35.iad>

Show all headers | View raw


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

> Ben Bacarisse <ben.usenet@bsb.me.uk> writes:
>>scott@slp53.sl.home (Scott Lurndal) writes:
>>
>
>>> 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)
>
>
> As you say, the first four don't require parens.
>
>>
>>(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) ...
>
> I would use parens with the four immediately above.

So you consider it confusing, or at least not immediately obvious (to
you or your readers), that relational operators have higher precedence
than && and ||?  That one surprises me.

I was hoping you'd add the parentheses.  I presume you'd add

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

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

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

and no more?  I find the last two very fussy.

>>  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();
>
> I wouldn't have written any of these four the way you have
> unless I was writing a korn shell script.  In C/C++, I'd use
> if sans side effects:
>
>    e.g.
>
>    result = process(file);
>    if (result) {
>        tidy_up();
>    } else {
>        log_error();
>    }

That's another matter.  The two bits of code do different things.  You
have to do more work to get result set to the correct "success" status.

>>  if (1 << n > limit) ...
>>
>>  1 << w-1 & bits
>
> These I would have used parens

Are you OK with '<<' vs. '-' but not '<<' vs. '&'?  Or it is both?

-- 
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