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


Groups > comp.lang.c > #95231

Re: pointers

From BartC <bc@freeuk.com>
Newsgroups comp.lang.c
Subject Re: pointers
Date 2016-10-24 17:25 +0100
Organization A noiseless patient Spider
Message-ID <nulcl7$sr1$1@dont-email.me> (permalink)
References (3 earlier) <726d78eb-47b3-1b92-0203-e2f63bb740ae@verizon.net> <nujilm$4tg$1@dont-email.me> <ln7f8yd20j.fsf@kst-u.example.com> <nukp62$tfg$1@dont-email.me> <lnpompbvcj.fsf@kst-u.example.com>

Show all headers | View raw


On 24/10/2016 16:49, Keith Thompson wrote:
> BartC <bc@freeuk.com> writes:

>> The behaviour of the non-conforming compilers seems fine to be. Each &
>> and * pair cancel each other out, as seems to happen with the conforming
>> gcc.

> What compiler doesn't diagnose `& & &**pointer`?

Pelles C and lccwin.

And MSVC-2008.

>> Should it matter then in which order the & and * appear? By the time you
>> get to the actual term, you've either got more & than *, or more * than
>> &, or they cancel each other out completely.
>
> The fact is that it *does* matter.  The standard says that & and *
> cancel out in certain narrowly defined circumstances.  I see no
> advantage in allowing them to cancel out in any cases beyond those
> defined by the standard.

Think of it the other way around: if one & pairs with one *, and the two 
then cancel out, should it matter if it's &* or *&, or &*&* instead of &&**?

Presumably gcc works from the bottom up: &&**pointer must be processed 
as strictly &(&(*(*pointer))), where each bracketed term starting from 
the innermost must be a legal expression type-wise, before applying the 
next operator.

This means that:

   int a;  &*a;

won't work, as *a is not legal. (But *&a is OK, as &a is valid.) However 
those non-conforming compilers don't like this either, so they are not 
just balancing & and * operators before applying any result (any surplus 
of & or *) to the term.

 > Is there some reason you'd want to write `& & &**pointer`, or that you
 > care how the compiler handles it?

If & and * just mean opposite things (* adds a dereference, & removes 
one), then making them cancel each other makes sense. The net number of 
deferences must still be meaningful (too many * or & is still an error).

And yes I can see this being used, even if it's just to illustrate an 
example like this (you'll need to imagine the spaces between &s):

  int **pointer;

      **pointer;     // 3 net derefs (one is always implicit with
                     // variables in HLLs); result: int
     &**pointer;     // 2 net derefs; int*   ( *pointer)
    &&**pointer;     // 1 net deref;  int**  (  pointer)
   &&&**pointer;     // 0 net derefs; int*** ( &pointer)
  &&&&**pointer;     // -1 net derefs: error (&&pointer)

(You'll notice many of my posts strive to add orthogonality to C, but it 
seems the language just won't have it!)

-- 
Bartc

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


Thread

pointers asetofsymbols@gmail.com - 2016-10-23 08:11 -0700
  Re: pointers Richard Heathfield <rjh@cpax.org.uk> - 2016-10-23 16:26 +0100
    Re: pointers asetofsymbols@gmail.com - 2016-10-23 10:35 -0700
      Re: pointers Ike Naar <ike@iceland.freeshell.org> - 2016-10-23 17:47 +0000
        Re: pointers asetofsymbols@gmail.com - 2016-10-25 12:55 -0700
      Re: pointers "James R. Kuyper" <jameskuyper@verizon.net> - 2016-10-23 13:58 -0400
        Re: pointers BartC <bc@freeuk.com> - 2016-10-24 00:55 +0100
          Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-23 17:27 -0700
            Re: pointers BartC <bc@freeuk.com> - 2016-10-24 11:53 +0100
              Re: pointers supercat@casperkitty.com - 2016-10-24 07:29 -0700
                Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-24 08:55 -0700
                Re: pointers Tim Rentsch <txr@alumni.caltech.edu> - 2016-10-24 14:02 -0700
                Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-24 14:42 -0700
                Re: pointers Tim Rentsch <txr@alumni.caltech.edu> - 2016-10-25 08:56 -0700
                Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-25 12:17 -0700
                Re: pointers Tim Rentsch <txr@alumni.caltech.edu> - 2016-10-26 06:37 -0700
              Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-24 08:49 -0700
                Re: pointers BartC <bc@freeuk.com> - 2016-10-24 17:25 +0100
                Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-24 09:52 -0700
                Re: pointers BartC <bc@freeuk.com> - 2016-10-24 18:15 +0100
                Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-24 12:20 -0700
                Re: pointers BartC <bc@freeuk.com> - 2016-10-24 20:58 +0100
                Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-24 13:16 -0700
                Re: pointers BartC <bc@freeuk.com> - 2016-10-24 23:53 +0100
                Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-25 13:38 -0700
                Re: pointers BartC <bc@freeuk.com> - 2016-10-25 23:06 +0100
                Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-25 15:39 -0700
                Re: pointers BartC <bc@freeuk.com> - 2016-10-26 00:26 +0100
                Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-25 16:44 -0700
                Re: pointers BartC <bc@freeuk.com> - 2016-10-26 01:02 +0100
                Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-25 17:35 -0700
                Re: pointers Ike Naar <ike@iceland.freeshell.org> - 2016-10-26 06:27 +0000
                Re: pointers BartC <bc@freeuk.com> - 2016-10-26 12:47 +0100
                Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-26 09:05 -0700
                Re: pointers BartC <bc@freeuk.com> - 2016-10-26 18:46 +0100
                Re: pointers supercat@casperkitty.com - 2016-10-26 11:44 -0700
                Re: pointers BartC <bc@freeuk.com> - 2016-10-26 20:12 +0100
                Re: pointers BartC <bc@freeuk.com> - 2016-10-26 20:30 +0100
                Re: pointers supercat@casperkitty.com - 2016-10-26 13:02 -0700
                Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-26 11:52 -0700
                Re: pointers Ike Naar <ike@iceland.freeshell.org> - 2016-10-26 19:11 +0000
                Re: pointers BartC <bc@freeuk.com> - 2016-10-26 21:25 +0100
                Re: pointers "James R. Kuyper" <jameskuyper@verizon.net> - 2016-10-25 18:56 -0400
                Re: pointers "James R. Kuyper" <jameskuyper@verizon.net> - 2016-10-25 19:12 -0400
                Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-25 16:31 -0700
                Re: pointers Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-10-24 21:36 +0100
                Re: pointers BartC <bc@freeuk.com> - 2016-10-25 16:54 +0100
                Re: pointers Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-10-25 19:09 +0100
                Re: pointers supercat@casperkitty.com - 2016-10-24 11:33 -0700
                Re: pointers Keith Thompson <kst-u@mib.org> - 2016-10-24 12:22 -0700
          Re: pointers James Kuyper <jameskuyper@verizon.net> - 2016-10-24 10:23 -0400
  Re: pointers "James R. Kuyper" <jameskuyper@verizon.net> - 2016-10-23 12:31 -0400
    Re: pointers Richard Heathfield <rjh@cpax.org.uk> - 2016-10-23 17:38 +0100
  Re: pointers Lorinczy Zsigmond <zsiga@nospam.for.me> - 2016-10-24 14:02 +0200
  Re: pointers John Bode <jfbode1029@gmail.com> - 2016-10-24 13:34 -0700

csiph-web