+1, against type casting for this

On Wed, May 19, 2010 at 12:31 PM, Bryan Call <bc...@yahoo-inc.com> wrote:

> On 05/19/2010 09:14 AM, John Plevyak wrote:
>
>> Yes we will change INXXX_MAX etc.
>>
>> Unfortunately int64 is not standard.  So we have a couple alternatives.
>>
>> 1) use nonstandard types where
>>
>>   typedef long long int int64;
>>   typedef int int32;
>>   typedef short int16;
>>   typedef char int8;
>>
>>   etc.
>>
>> which work on every system and which permit seamless printf
>> using %lld and %d.  This is the way we do it now.
>>
>>
>>
>
> +1 - This is the lesser of the evils...
>
> Only because there is no other way to get *printf() from complaining
> without using macros or type casting.
>
>
>  2. use "standard" types and cast all printf/scanf calls:
>>
>>   printf("x = %lld", *(long long int*)&my_standard_uint64_t_var)
>>
>> 3. use the "standard" types and the "standard" macros:
>>
>>   printf("x = " PRIi64, my_standard_uint64_t_var)
>>
>> however, it should be noted that this doesn't work for strings which are
>> not constants, are read from a configuration file or input by the
>> user, computed etc.
>>
>> I think that 1 is the least of the evils.  2 is dangerous and ugly
>> and 3 is ugly and a pain, and potentially complex as it might mean
>> rewriting printf/scanf strings on the fly and this standard is
>> relatively recent which means that lots of older systems don't support
>> it which means including the headers ourselves.  MS Studio didn't
>> support it until the 2010 version for example.
>>
>>
>> On 5/19/2010 8:16 AM, Leif Hedstrom wrote:
>>
>>
>>> On 05/19/2010 08:23 AM, John Plevyak wrote:
>>>
>>>
>>>> I propose that we change
>>>>
>>>> ink64 ->   int64
>>>> inku64 ->   uint64
>>>> ink32 ->   int32
>>>> inku32 ->   uint32
>>>> ink16 ->   int16
>>>> inku16 ->   uint16
>>>> ink8 ->   int8
>>>> inku8 ->   uint8
>>>>
>>>> because
>>>>
>>>> 1) we decided to move from ink ->   ts
>>>> 2) tsu64 doesn't scan like an integer
>>>> 3) int64_t is long on linux which is incompatible with %lld the
>>>>     only standard and universally compatible way to read/write a
>>>> 64-bit number
>>>> 4) int64 is similar but not the same as ink64_t and it scans well
>>>> 5) I tried it and it works!
>>>>
>>>>
>>>>
>>> Would this be a name change only (in our ink_port.h file)? Or do we pull
>>> in int64 etc from some standard (ANSI / POSIX include file)? My stdint.h
>>> only has the int64_t etc. definitions.
>>>
>>> Also, if we do this, shouldn't we also change
>>>
>>> #define INKU64_MAX (18446744073709551615ULL)
>>> #define INK64_MAX (9223372036854775807LL)
>>> #define INK64_MIN (-INK64_MAX -1LL)
>>> #define INKU32_MAX (4294967295U)
>>> #define INK32_MAX (2147483647)
>>> #define INK32_MIN (-2147483647-1)
>>>
>>>
>>> I believe there are similar defines available in stdint.h. (Fwiw, my
>>> 64-bit changes in the HttpSM uses INK64_MAX in various places).
>>>
>>> That much said, +1 on eliminating our own INK defines, and use standard
>>> definitions.
>>>
>>> -- leif
>>>
>>>
>>
>>
>
>
>

Reply via email to