Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Shao Miller <sha0.miller@gmail.com> |
|---|---|
| Newsgroups | comp.std.c |
| Subject | Re: null pointer constant, address constant |
| Date | 2012-12-18 14:02 -0500 |
| Organization | A noiseless patient Spider |
| Message-ID | <kaqekj$8st$1@dont-email.me> (permalink) |
| References | <kapqt2$es4$1@speranza.aioe.org> |
On 12/18/2012 08:25, Szabolcs Nagy wrote: > > but it seems > > 0 ? (void*)0 : (void*)0 > > is not a null pointer constant, nor an address constant > > it is mildly unexpected that this cannot be used as a > null pointer constant > (this matters when determining the type of ?: (6.5.15) > expressions, assigning it to function pointers (6.5.16.1) > or comparing it to function pointers (6.5.9)) > It seems more useful as a "constant null pointer" than as a "null pointer constant," which is trivial. This construct seems to allow you to sneak out of NPC semantics if desired, while still using a null pointer value, a 'void *' type, and no identifiable objects. To follow your notes: x ? ptr : CNP now has type 'void *' instead of the type of 'ptr', funcptr = CNP contrasts a function type with an incomplete object type, and so do funcptr == CNP funcptr != CNP > but (for me at least) it's more surprising that this is > not even a constant expression that can be used in > initializers, ie. > > void *p = 0?(void*)0:(void*)0; > Why not? 6.6p7 says an initializer can evaluate to an address constant. 6.6p9 says an address constant can be a null pointer. Your ternary yields one or the other of two such address constants that were created by a cast of a null pointer constant. Could you point out what I've missed? > another similar surprising case is > > void *q = (void*)((char*)1 - (char*)1); > This doesn't surprise me. The most portable code cannot assume that '(char *) 1' means anything. I would not expect an implementation to deal with anything other than null pointer values and the addresses of actual functions and objects, at translation-time. In the code you've shared, it bounces out of the realm of portability temporarily with the hope of returning to it, but I don't think it can be so. - Shao Miller
Back to comp.std.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
null pointer constant, address constant Szabolcs Nagy <nsz@port70.net> - 2012-12-18 13:25 +0000
Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-18 09:53 -0500
Re: null pointer constant, address constant Szabolcs Nagy <nsz@port70.net> - 2012-12-18 20:06 +0000
Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-18 15:39 -0500
Re: null pointer constant, address constant Szabolcs Nagy <nsz@port70.net> - 2012-12-19 00:44 +0000
Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-18 20:24 -0500
Re: null pointer constant, address constant Szabolcs Nagy <nsz@port70.net> - 2012-12-19 10:27 +0000
Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-19 07:15 -0500
Re: null pointer constant, address constant Phil Carmody <thefatphil_demunged@yahoo.co.uk> - 2012-12-21 03:03 +0200
Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-21 12:13 -0500
Re: null pointer constant, address constant Szabolcs Nagy <nsz@port70.net> - 2013-01-09 00:44 +0000
Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2013-01-08 20:21 -0500
Re: null pointer constant, address constant Eric Sosman <esosman@comcast-dot-net.invalid> - 2013-01-08 20:46 -0500
Re: null pointer constant, address constant Shao Miller <sha0.miller@gmail.com> - 2012-12-18 20:37 -0500
Re: null pointer constant, address constant Shao Miller <sha0.miller@gmail.com> - 2012-12-18 16:15 -0500
Re: null pointer constant, address constant Keith Thompson <kst-u@mib.org> - 2012-12-18 15:52 -0800
Re: null pointer constant, address constant Shao Miller <sha0.miller@gmail.com> - 2012-12-18 19:12 -0500
Re: null pointer constant, address constant Shao Miller <sha0.miller@gmail.com> - 2012-12-18 19:51 -0500
Re: null pointer constant, address constant Keith Thompson <kst-u@mib.org> - 2012-12-18 17:02 -0800
Re: null pointer constant, address constant "christian.bau" <christian.bau@cbau.wanadoo.co.uk> - 2012-12-20 05:34 -0800
Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-20 10:33 -0500
Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-20 12:28 -0500
Re: null pointer constant, address constant Tim Rentsch <txr@alumni.caltech.edu> - 2012-12-20 21:13 -0800
Re: null pointer constant, address constant Tim Rentsch <txr@alumni.caltech.edu> - 2012-12-20 21:05 -0800
Re: null pointer constant, address constant Shao Miller <sha0.miller@gmail.com> - 2012-12-20 12:17 -0500
Re: null pointer constant, address constant Keith Thompson <kst-u@mib.org> - 2012-12-20 12:10 -0800
Re: null pointer constant, address constant Tim Rentsch <txr@alumni.caltech.edu> - 2012-12-20 21:25 -0800
Re: null pointer constant, address constant Shao Miller <sha0.miller@gmail.com> - 2012-12-18 14:02 -0500
Re: null pointer constant, address constant Szabolcs Nagy <nsz@port70.net> - 2012-12-18 20:09 +0000
Re: null pointer constant, address constant James Kuyper <jameskuyper@verizon.net> - 2012-12-18 15:54 -0500
Re: null pointer constant, address constant Shao Miller <sha0.miller@gmail.com> - 2012-12-18 16:18 -0500
csiph-web