[Kst] [Bug 74239] New: int datatype in kst plugins and data sources is not 64-bit clean

Ted Kisner kisner at physics.ucsb.edu
Thu Feb 5 18:06:53 CET 2004


I would recommend against ever explicitly using "long", as it can be either 32 
or 64 bits depending on the platform.  What I've always done is use 
AC_CHECK_SIZEOF at build time to go through all standard C types and then 
define types that have a constant bit-width.

Maybe there is an easier way to do this, but this is the best I've found...

for example:

configure.in
--------------
...
AC_CHECK_SIZEOF(int8,0)
AC_CHECK_SIZEOF(int16,0)
AC_CHECK_SIZEOF(int32,0)
AC_CHECK_SIZEOF(int64,0)
AC_CHECK_SIZEOF(uint8,0)
AC_CHECK_SIZEOF(uint16,0)
AC_CHECK_SIZEOF(uint32,0)
AC_CHECK_SIZEOF(uint64,0)
AC_CHECK_SIZEOF(float32,0)
AC_CHECK_SIZEOF(float64,0)
AC_CHECK_SIZEOF(char,0)
AC_CHECK_SIZEOF(signed char,0)
AC_CHECK_SIZEOF(unsigned char,0)
AC_CHECK_SIZEOF(short int,0)
AC_CHECK_SIZEOF(unsigned short int,0)
AC_CHECK_SIZEOF(int,0)
AC_CHECK_SIZEOF(unsigned int,0)
AC_CHECK_SIZEOF(long int,0)
AC_CHECK_SIZEOF(unsigned long int,0)
AC_CHECK_SIZEOF(long long int,0)
AC_CHECK_SIZEOF(unsigned long long int,0)
AC_CHECK_SIZEOF(float,0)
AC_CHECK_SIZEOF(double,0)
...

Then, in some global header file
----------------------------------------------------

/* set up some portable types of constant bit-width */

#if SIZEOF_INT8 != 1
#  undef int8
#  if SIZEOF_SIGNED_CHAR == 1
#    define int8 signed char
#  elif SIZEOF_SHORT_INT == 1
#    define int8 short int
#  elif SIZEOF_INT == 1
#    define int8 int
#  elif SIZEOF_LONG_INT == 1
#    define int8 long int
#  elif SIZEOF_LONG_LONG_INT == 1
#    define int8 long long int
#  endif
#endif

#if SIZEOF_UINT8 != 1
#  undef uint8
#  if SIZEOF_UNSIGNED_CHAR == 1
#    define uint8 unsigned char
#  elif SIZEOF_UNSIGNED_SHORT_INT == 1
#    define uint8 unsigned short int
#  elif SIZEOF_UNSIGNED_INT == 1
#    define uint8 unsigned int
#  elif SIZEOF_UNSIGNED_LONG_INT == 1
#    define uint8 unsigned long int
#  elif SIZEOF_UNSIGNED_LONG_LONG_INT == 1
#    define uint8 unsigned long long int
#  endif
#endif

#if SIZEOF_INT16 != 2
#  undef int16
#  if SIZEOF_SIGNED_CHAR == 2
#    define int16 signed char
#  elif SIZEOF_SHORT_INT == 2
#    define int16 short int
#  elif SIZEOF_INT == 2
#    define int16 int
#  elif SIZEOF_LONG_INT == 2
#    define int16 long int
#  elif SIZEOF_LONG_LONG_INT == 2
#    define int16 long long int
#  endif
#endif

#if SIZEOF_UINT16 != 2
#  undef uint16
#  if SIZEOF_UNSIGNED_CHAR == 2
#    define uint16 unsigned char
#  elif SIZEOF_UNSIGNED_SHORT_INT == 2
#    define uint16 unsigned short int
#  elif SIZEOF_UNSIGNED_INT == 2
#    define uint16 unsigned int
#  elif SIZEOF_UNSIGNED_LONG_INT == 2
#    define uint16 unsigned long int
#  elif SIZEOF_UNSIGNED_LONG_LONG_INT == 2
#    define uint16 unsigned long long int
#  endif
#endif

#if SIZEOF_INT32 != 4
#  undef int32
#  if SIZEOF_SIGNED_CHAR == 4
#    define int32 signed char
#  elif SIZEOF_SHORT_INT == 4
#    define int32 short int
#  elif SIZEOF_INT == 4
#    define int32 int
#  elif SIZEOF_LONG_INT == 4
#    define int32 long int
#  elif SIZEOF_LONG_LONG_INT == 4
#    define int32 long long int
#  endif
#endif

#if SIZEOF_UINT32 != 4
#  undef uint32
#  if SIZEOF_UNSIGNED_CHAR == 4
#    define uint32 unsigned char
#  elif SIZEOF_UNSIGNED_SHORT_INT == 4
#    define uint32 unsigned short int
#  elif SIZEOF_UNSIGNED_INT == 4
#    define uint32 unsigned int
#  elif SIZEOF_UNSIGNED_LONG_INT == 4
#    define uint32 unsigned long int
#  elif SIZEOF_UNSIGNED_LONG_LONG_INT == 4
#    define uint32 unsigned long long int
#  endif
#endif

#if SIZEOF_INT64 != 8
#  undef int64
#  if SIZEOF_SIGNED_CHAR == 8
#    define int64 signed char
#  elif SIZEOF_SHORT_INT == 8
#    define int64 short int
#  elif SIZEOF_INT == 8
#    define int64 int
#  elif SIZEOF_LONG_INT == 8
#    define int64 long int
#  elif SIZEOF_LONG_LONG_INT == 8
#    define int64 long long int
#  endif
#endif

#if SIZEOF_UINT64 != 8
#  undef uint64
#  if SIZEOF_UNSIGNED_CHAR == 8
#    define uint64 unsigned char
#  elif SIZEOF_UNSIGNED_SHORT_INT == 8
#    define uint64 unsigned short int
#  elif SIZEOF_UNSIGNED_INT == 8
#    define uint64 unsigned int
#  elif SIZEOF_UNSIGNED_LONG_INT == 8
#    define uint64 unsigned long int
#  elif SIZEOF_UNSIGNED_LONG_LONG_INT == 8
#    define uint64 unsigned long long int
#  endif
#endif

#if SIZEOF_FLOAT32 != 4
#  undef float32
#  if SIZEOF_FLOAT == 4
#    define float32 float
#  elif SIZEOF_DOUBLE == 4
#    define float32 double
#  elif SIZEOF_LONG_DOUBLE == 4
#    define float32 long double
#  endif
#endif

#if SIZEOF_FLOAT64 != 8
#  undef float64
#  if SIZEOF_FLOAT == 8
#    define float64 float
#  elif SIZEOF_DOUBLE == 8
#    define float64 double
#  elif SIZEOF_LONG_DOUBLE == 8
#    define float64 long double
#  endif
#endif

Now you can use these types (float64, int32, etc) with confidence, knowing 
that they have the correct bitsize.

-Ted 

On Thursday 05 February 2004 11:28, Barth Netterfield wrote:
> Is there an architecture independent standard for how many bits each type
> is?
>
> There wasn't 10 years ago (early DEC alpha days)....
>
> cbn
>
> On Thursday 05 February 2004 09:41 am, George Staikos wrote:
> > ------- You are receiving this mail because: -------
> > You are the assignee for the bug, or are watching the assignee.
> >
> > http://bugs.kde.org/show_bug.cgi?id=74239
> >            Summary: int datatype in kst plugins and data sources is not
> > 64- bit clean
> >            Product: kst
> >            Version: unspecified
> >           Platform: Compiled Sources
> >         OS/Version: Linux
> >             Status: NEW
> >           Severity: major
> >           Priority: NOR
> >          Component: general
> >         AssignedTo: kst at kde.org
> >         ReportedBy: staikos at kde.org
> >
> >
> > We need to use 64-bit clean data types in Kst, in particular plugins and
> > data sources.  We also need to use "long" explicitly to specify the
> > length of vectors or amount of data read.  PIO uses long, and data
> > streams can extremely large.
> > _______________________________________________
> > Kst mailing list
> > Kst at kde.org
> > https://mail.kde.org/mailman/listinfo/kst
>
> _______________________________________________
> Kst mailing list
> Kst at kde.org
> https://mail.kde.org/mailman/listinfo/kst




More information about the Kst mailing list