[Info-vax] problem with 64-bit pointers in C

Jan-Erik Soderholm jan-erik.soderholm at telia.com
Wed Jan 31 06:53:19 EST 2018


Den 2018-01-31 kl. 12:30, skrev Joukj:
> Jan-Erik Soderholm wrote:
>> Den 2018-01-31 kl. 11:08, skrev Joukj:
>>> ergamenes at gmail.com wrote:
>>>> On Wednesday, 31 January 2018 08:36:25 UTC, Joukj  wrote:
>>>>
>>>>> Looks like the artthmatic - (and + ) on pointers is not resulting in 
>>>>> the expected 64-bit pointer as it should.
>>>>
>>>> I can see two problems: one is that subtracting arbitrary pointers is 
>>>> UB, so anything can happen.
>>> The code where it comes from uses this to determine the length a 
>>> data-string. It works OK with 32 bit pointers.
>>>
>>>>
>>>> The other thing is that when it is valid, it gives a result that is of 
>>>> type ptrdiff_t, which here is defined to be an int. That does mean that 
>>>> there is a restriction that you can't have arrays of more than 2^31 
>>>> elements. 
>>>
>>> What I read from the error message is that the subtraction is performed 
>>> in 64 bit but afterwards the result is cast to a int (or prtdiff_t). 
>>> What is the reason for doing this?
>>> If I run my sample program on a 64-bit Linux system I get the expected 
>>> results.
>>>
>>>                  Jouk
>>
>> http://www.gnu.org/software/libc/manual/html_node/Important-Data-Types.html
>>
>>
> This implicates that when compiling with 64-bit pointers you always get a 
> warning when subtracting pointers with DECC. How can you avoid the warning!
> 
>           Jouk

Can one make a copy of the stddef.h and typedef ptrdiff_t to something
else than "int"?





More information about the Info-vax mailing list