Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: James Kuyper Newsgroups: comp.lang.c Subject: Re: question about nullptr Date: Wed, 10 Jul 2024 18:50:00 -0400 Organization: A noiseless patient Spider Lines: 45 Message-ID: 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=UTF-8 Content-Transfer-Encoding: 7bit Injection-Date: Thu, 11 Jul 2024 00:50:00 +0200 (CEST) Injection-Info: dont-email.me; posting-host="7338e67614b36e18c17f3563b3f8bed2"; logging-data="2205222"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+Xel40667IWMlCEmAVQoQX8XVOPRH2S2U=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:LGGo7OzRBZvebWRXqV0fvSe5+LY= Content-Language: en-US In-Reply-To: <87cynluekl.fsf@nosuchdomain.example.com> Bytes: 2828 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. "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. If he had written (void*)(long)0.0 that would not have been a problem.