Path: ...!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Tim Rentsch Newsgroups: comp.lang.c Subject: Re: question about nullptr Date: Mon, 12 Aug 2024 17:42:39 -0700 Organization: A noiseless patient Spider Lines: 58 Message-ID: <861q2t1ce8.fsf@linuxsc.com> References: <20240706054641.175@kylheku.com> <877cdyuq0f.fsf@bsb.me.uk> <2ckiO.19403$7Ej.4487@fx46.iad> <87plrpt4du.fsf@bsb.me.uk> <9bCiO.7108$sXW9.3805@fx41.iad> <877cdwu9s1.fsf@nosuchdomain.example.com> <20240708222804.00001654@yahoo.com> <86le2b9ru6.fsf@linuxsc.com> <8734ojxlg7.fsf@nosuchdomain.example.com> <86msmp8fld.fsf@linuxsc.com> <87cynluekl.fsf@nosuchdomain.example.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Date: Tue, 13 Aug 2024 02:42:40 +0200 (CEST) Injection-Info: dont-email.me; posting-host="7741d78d7fa92162b25738c81b1a0845"; logging-data="3733603"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18GL9trHk12ztjftE/RLhIlMMKOUz3oZn0=" User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux) Cancel-Lock: sha1:jcdiLuso/+8/B40trKwcUVYkoH8= sha1:IsDVrq0yt4f9gnzsB/XUZcXkaZ8= Bytes: 3307 James Kuyper writes: > On 7/10/24 17:23, Keith Thompson wrote: > >> Tim Rentsch writes: >> >>> Keith Thompson writes: >>> >>>> Tim Rentsch writes: >>>> [...] >>>> >>>>> This posting has inspired me to try using (long)0.0 >>>>> whenever a null pointer constant is needed. As for >>>>> example >>>>> >>>>> (void*){ (long)0.0 } >>>>> >>>>> as an argument to a variadic function where a pointer >>>>> is expected. >>>> >>>> But surely ((void*)('/'/'/'-'/'/'/')) is more elegant. >>> >>> Surely not. Furthermore the form I showed has a point, >>> whereas this example is roughly the equivalent of a >>> first grade knock-knock joke. >> >> I was of course joking. I assumed you were as well. >> >> What is the point of (void*){ (long)0.0 }? I don't believe it's >> a null pointer constant even in C23. > > I think you're right about that. The compound literal is not a null pointer constant. I didn't say it is. The null pointer constant is (long)0.0, like my earlier posting pointed out. > "An integer constant expression132) ... shall only have operands > that are ... compound literal constants of arithmetic type that > are the immediate operands of casts. ... Cast operators in an > integer constant expression shall only convert arithmetic types to > integer types, ...", so (long)0.0 is permitted." > > While (void*) looks like a cast, in this context it is a compound > literal of pointer type, which is not allowed. [..] Don't be silly. The compound literal works just fine in the context I mentioned for it: #include int main(){ printf( " null pointer : %p\n", (void*){ (long)0.0 } ); return 0; } Compile it for yourself if you don't believe me.