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


Groups > comp.lang.c > #73503

Re: Pointers as error values

From Keith Thompson <kst-u@mib.org>
Newsgroups comp.lang.c
Subject Re: Pointers as error values
Date 2015-10-21 10:41 -0700
Organization None to speak of
Message-ID <lntwpkw249.fsf@kst-u.example.com> (permalink)
References <bb26d1c2-246b-45cd-8434-583530881c88@googlegroups.com> <lnlhayzw6g.fsf@kst-u.example.com> <n0781l$lg2$1@speranza.aioe.org>

Show all headers | View raw


"Morten W. Petersen" <morphex@gmail.com> writes:
> On 19.10.2015 17:59, Keith Thompson wrote:
>> "Morten W. Petersen" <morphex@gmail.com> writes:
>>> I was thinking the other day, that NULL pointers indicate an error.
>>> That got me wondering, is it possible to use a low number range as
>>> valid error indicators?
>>
>> A null pointer doesn't necessarily indicate an error.  Sometimes it's a
>> valid result.
>>
>>> That is, could for example numbers from 1 to 7 be safely used as error
>>> indicators from a function that should return a pointer?
>>
>> Not 100% portably.  A small non-zero integer converted to a pointer
>> type is unlikely to match a valid pointer value, but there's no
>> guarantee.  Even accessing an invalid pointer (without dereferencing
>> it) can have undefined behavior.
>
> Hmm, OK.  That dereferencing wouldn't work was expected, but why would
> working with an address value not work?
>
> What is a real-life example where using 1-7 as pointer return values
> would not work?

I don't have a real-life example, and it's entirely possible that you
could write code that assumes (void*)1, (void*)2, et al are distinct
values that can be used and compared safely as long as you don't try to
dereference them and get away with it.  But such code goes beyond the
behavior guaranteed by the standard.

This code:

    void *p0 = NULL;
    void *p1 = (void*)1;
    puts(p0 == p1 ? "equal" : "unequal");

will *probably* print "unequal", but its behavior is not defined by the
standard.  In principle, it could print "equal" if the implementation
uses the same representation for a null pointer and for (void*)1.  Or it
could crash if loading an invalid pointer into a register causes a trap.

[...]

> Yes, using static objects is a nice, clean alternative, but would
> require checking if each and every of these static objects match.

If the static objects are elements of an array, you can at least use a
loop to compare a pointer for equality to each element's address rather
than coding each comparison explicitly.

> So far I'd like to go for something like what Jacob suggested earlier,
> a simple less-than comparison.

If you define macros like:

    #define P1 ((void*)1)
    #define P2 ((void*)2)
    /* ... */
    #define P7 ((void*)7)

it's likely that
    (p >= P1 && p <= P7)
will yield the same result as
    (p == P1 || p == P2 || ... || p == P7)

If you want to depend on that, feel free to do so.  Just be aware that
you're going beyond what the standard guarantees.

Incidentally, I've worked on systems where the above would mostly work,
but it would be possible to construct a pointer p such that
    (P1 < p && p < P2).
Such a pointer would be unlikely to be created accidentally, so the
scheme would probably still work.

(It's also possible that an optimizer might transform your code based on
the assumption that its behavior is defined.)

-- 
Keith Thompson (The_Other_Keith) kst-u@mib.org  <http://www.ghoti.net/~kst>
Working, but not speaking, for JetHead Development, Inc.
"We must do something.  This is something.  Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"

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


Thread

Pointers as error values "Morten W. Petersen" <morphex@gmail.com> - 2015-10-19 00:53 -0700
  Re: Pointers as error values gazelle@shell.xmission.com (Kenny McCormack) - 2015-10-19 08:26 +0000
    Re: Pointers as error values "Morten W. Petersen" <morphex@gmail.com> - 2015-10-19 02:27 -0700
    Re: Pointers as error values Richard Damon <Richard@Damon-Family.org> - 2015-10-19 23:38 -0400
  Re: Pointers as error values jacobnavia <jacob@jacob.remcomp.fr> - 2015-10-19 10:34 +0200
    Re: Pointers as error values "Morten W. Petersen" <morphex@gmail.com> - 2015-10-19 02:29 -0700
    Re: Pointers as error values mark.bluemel@gmail.com - 2015-10-19 05:53 -0700
  Re: Pointers as error values glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-10-19 10:00 +0000
  Re: Pointers as error values Jorgen Grahn <grahn+nntp@snipabacken.se> - 2015-10-19 14:00 +0000
  Re: Pointers as error values gwowen <gwowen@gmail.com> - 2015-10-19 08:02 -0700
    Re: Pointers as error values James Kuyper <jameskuyper@verizon.net> - 2015-10-19 11:53 -0400
  Re: Pointers as error values Ken Brody <kenbrody@spamcop.net> - 2015-10-19 11:25 -0400
  Re: Pointers as error values supercat@casperkitty.com - 2015-10-19 08:41 -0700
  Re: Pointers as error values Keith Thompson <kst-u@mib.org> - 2015-10-19 08:59 -0700
    Re: Pointers as error values "Morten W. Petersen" <morphex@gmail.com> - 2015-10-21 07:32 +0200
      Re: Pointers as error values Ian Collins <ian-news@hotmail.com> - 2015-10-21 19:17 +1300
        Re: Pointers as error values "Morten W. Petersen" <morphex@gmail.com> - 2015-10-21 08:31 +0200
      Re: Pointers as error values Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-21 12:46 +0100
      Re: Pointers as error values Robert Wessel <robertwessel2@yahoo.com> - 2015-10-21 09:35 -0500
        Re: Pointers as error values Ken Brody <kenbrody@spamcop.net> - 2015-10-21 15:24 -0400
          Re: Pointers as error values glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-10-22 05:44 +0000
      Re: Pointers as error values Keith Thompson <kst-u@mib.org> - 2015-10-21 10:41 -0700
        Re: Pointers as error values supercat@casperkitty.com - 2015-10-21 11:28 -0700
      Re: Pointers as error values John Temples <usenet@xargs-spam.com> - 2015-10-21 17:45 +0000
        Re: Pointers as error values James Kuyper <jameskuyper@verizon.net> - 2015-10-21 14:15 -0400
          Re: Pointers as error values "Morten W. Petersen" <morphex@gmail.com> - 2015-10-29 16:59 +0100
            Re: Pointers as error values supercat@casperkitty.com - 2015-10-29 12:35 -0700
              Re: Pointers as error values raltbos@xs4all.nl (Richard Bos) - 2015-10-29 21:45 +0000
                Re: Pointers as error values "Morten W. Petersen" <morphex@gmail.com> - 2015-10-30 06:09 +0100
                Re: Pointers as error values Rosario19 <Ros@invalid.invalid> - 2015-10-30 08:59 +0100
                Re: Pointers as error values Rosario19 <Ros@invalid.invalid> - 2015-10-30 09:07 +0100
                Re: Pointers as error values Rosario19 <Ros@invalid.invalid> - 2015-10-30 09:38 +0100
                Re: Pointers as error values Rosario19 <Ros@invalid.invalid> - 2015-10-30 09:40 +0100
                Re: Pointers as error values Robert Wessel <robertwessel2@yahoo.com> - 2015-10-30 04:56 -0500
                Re: Pointers as error values Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-30 11:00 +0000
            Re: Pointers as error values Robert Wessel <robertwessel2@yahoo.com> - 2015-10-29 23:48 -0500
              Re: Pointers as error values "Morten W. Petersen" <morphex@gmail.com> - 2015-10-30 11:05 +0100
                Re: Pointers as error values Richard Damon <Richard@Damon-Family.org> - 2015-10-30 07:45 -0400
                Re: Pointers as error values Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-10-30 05:04 -0700
                Re: Pointers as error values "Morten W. Petersen" <morphex@gmail.com> - 2015-10-30 16:09 +0100
                Re: Pointers as error values Keith Thompson <kst-u@mib.org> - 2015-10-30 11:16 -0700
                Re: Pointers as error values glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-10-30 20:58 +0000
                Re: Pointers as error values Eric Sosman <esosman@comcast-dot-net.invalid> - 2015-10-30 17:12 -0400
                Re: Pointers as error values supercat@casperkitty.com - 2015-10-30 14:54 -0700
                Re: Pointers as error values Robert Wessel <robertwessel2@yahoo.com> - 2015-10-30 18:48 -0500
                Re: Pointers as error values glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-11-01 04:00 +0000
                Re: Pointers as error values Robert Wessel <robertwessel2@yahoo.com> - 2015-11-01 01:24 -0500
                Re: Pointers as error values "Morten W. Petersen" <morphex@gmail.com> - 2015-10-31 20:35 +0100
                Re: Pointers as error values supercat@casperkitty.com - 2015-10-31 13:33 -0700
                Re: Pointers as error values Richard Damon <Richard@Damon-Family.org> - 2015-10-30 22:19 -0400
                Re: Pointers as error values supercat@casperkitty.com - 2015-10-30 08:22 -0700
                Re: Pointers as error values Geoff <geoff@invalid.invalid> - 2015-10-30 13:11 -0700
                Re: Pointers as error values Geoff <geoff@invalid.invalid> - 2015-10-30 13:23 -0700
      Re: Pointers as error values Geoff <geoff@invalid.invalid> - 2015-10-21 11:13 -0700
        Re: Pointers as error values Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-21 20:31 +0100
          Re: Pointers as error values Geoff <geoff@invalid.invalid> - 2015-10-22 07:13 -0700
        Re: Pointers as error values "Morten W. Petersen" <morphex@gmail.com> - 2015-10-26 07:16 +0100
          Re: Pointers as error values Jorgen Grahn <grahn+nntp@snipabacken.se> - 2015-10-26 09:37 +0000
      Re: Pointers as error values glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-10-22 05:38 +0000
        Re: Pointers as error values Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-22 13:51 +0100
        Re: Pointers as error values Keith Thompson <kst-u@mib.org> - 2015-10-22 08:29 -0700
          Re: Pointers as error values supercat@casperkitty.com - 2015-10-22 09:21 -0700
            Re: Pointers as error values Keith Thompson <kst-u@mib.org> - 2015-10-22 10:52 -0700
              Re: Pointers as error values "Morten W. Petersen" <morphex@gmail.com> - 2015-10-26 07:20 +0100
                Re: Pointers as error values Keith Thompson <kst-u@mib.org> - 2015-10-26 08:09 -0700
                Re: Pointers as error values supercat@casperkitty.com - 2015-10-26 08:40 -0700
                Re: Pointers as error values glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-10-26 20:02 +0000
                Re: Pointers as error values supercat@casperkitty.com - 2015-10-26 13:56 -0700
          Re: Pointers as error values glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-10-22 21:58 +0000
            Re: Pointers as error values James Kuyper <jameskuyper@verizon.net> - 2015-10-22 19:12 -0400
            Re: Pointers as error values asetofsymbols@gmail.com - 2015-10-22 18:36 -0700
              Re: Pointers as error values asetofsymbols@gmail.com - 2015-10-29 12:47 -0700
  Re: Pointers as error values Lőrinczy Zsigmond <nospam@for.me> - 2015-10-20 17:06 +0200
    Re: Pointers as error values Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-20 19:45 +0100
      Re: Pointers as error values supercat@casperkitty.com - 2015-10-20 14:19 -0700
        Re: Pointers as error values glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-10-21 05:28 +0000
          Re: Pointers as error values supercat@casperkitty.com - 2015-10-21 05:48 -0700
            Re: Pointers as error values glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-10-22 05:52 +0000
          Re: Pointers as error values Ken Brody <kenbrody@spamcop.net> - 2015-10-21 15:19 -0400
            Re: Pointers as error values glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-10-22 06:06 +0000

csiph-web