Why do c++ libraries often define their own primitive types?

1.5k views Asked by At

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)?

2

There are 2 answers

2
Sergey Kalinichenko On BEST ANSWER

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 and short, 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 to cstdint in C++). Including this header lets you declare types int32_t, int16_t, etc. However, libraries developed prior to introduction of stdint.h and libraries that are required to compile on platforms lacking this header are using the old workaround.

0
Mark A. Ropper On

By defining their own types they can safely rely on knowing that those types will always be the same size.

Types can vary from platform to platform, and compiler to compiler. Although the STL does provide <cstdint> some developers prefer their own definitions because they don't wish to use the STL.

Most of the time you can assume that int will be 32 bits in size, but it can change, and that's where some developers prefer to define their own reliable types on the of chance that it might not be.