Groups | Search | Server Info | Keyboard shortcuts | Login | Register
Groups > comp.lang.c > #387533
| From | Tim Rentsch <tr.17687@z991.linuxsc.com> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: question about nullptr |
| Date | 2024-08-12 17:42 -0700 |
| Organization | A noiseless patient Spider |
| Message-ID | <861q2t1ce8.fsf@linuxsc.com> (permalink) |
| References | (10 earlier) <86le2b9ru6.fsf@linuxsc.com> <8734ojxlg7.fsf@nosuchdomain.example.com> <86msmp8fld.fsf@linuxsc.com> <87cynluekl.fsf@nosuchdomain.example.com> <v6n36o$239h6$2@dont-email.me> |
James Kuyper <jameskuyper@alumni.caltech.edu> writes:
> On 7/10/24 17:23, Keith Thompson wrote:
>
>> Tim Rentsch <tr.17687@z991.linuxsc.com> writes:
>>
>>> Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:
>>>
>>>> Tim Rentsch <tr.17687@z991.linuxsc.com> 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 <stdio.h>
int
main(){
printf( " null pointer : %p\n", (void*){ (long)0.0 } );
return 0;
}
Compile it for yourself if you don't believe me.
Back to comp.lang.c | Previous | Next — Next in thread | Find similar
Re: question about nullptr Tim Rentsch <tr.17687@z991.linuxsc.com> - 2024-08-12 17:42 -0700 Re: question about nullptr Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-08-12 18:33 -0700
csiph-web