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 18:10:44 -0700 Organization: A noiseless patient Spider Lines: 45 Message-ID: <86plqdz0q3.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 03:10:44 +0200 (CEST) Injection-Info: dont-email.me; posting-host="7741d78d7fa92162b25738c81b1a0845"; logging-data="3733603"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19uUkPqg3P3oNvFRgtQi4y3CRwdCgSyAc0=" User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux) Cancel-Lock: sha1:dgORL1aL+Bno02AvGtO/dgNEFKg= sha1:0W/vnz/XMEqTUISZbrmyJWCVls8= Bytes: 3109 Keith Thompson writes: > 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. The null pointer constant is (long)0.0, which it must be for the compound literal to work. Besides making it obvious that (long)0.0 is a null pointer constant, the compound literal is safer than using just a cast. > My example is. Your example actually has two null pointer constants: the expression being casted, and the full expression casting a null pointer constant to (void*). But in neither case is that especially obvious. Also the expression you wrote is less safe. For example, if it had been written ((void*)('/'/'/'+'/'/'/')), the result would still be legal C, and compile without problem, but would very likely not be what was desired. By contrast, if the compound literal had been written (void*){ (long)1.0 }, it simply would not give a clean compile, indicating that something is likely askew.