I have started using OpenCL library lately and I've noticed that they are using their own integer types, like cl_int and cl_uint instead of int and unsigned int.
Why is that? Why don't they use the types that are by default in the language? Is it a good practice or are there practical reasons for this (i.e. more readable code)?
The reason why this has been done in the past is portability. C and C++ do not make specific guarantees of the size of
int
,long
andshort
, while library designers often require it.A common solution is to define their own aliases for data types, and changing the definitions based on the specific platform, making sure that the type of the appropriate size gets used.
This problem originated in C, and has been addressed by introduction of
stdint.h
header file (renamed tocstdint
in C++). Including this header lets you declare typesint32_t
,int16_t
, etc. However, libraries developed prior to introduction ofstdint.h
and libraries that are required to compile on platforms lacking this header are using the old workaround.