stdint.h в C99 предоставляет множество вариантов целочисленных размеров, типов и диапазонов - так много, что я не знаю, какие выбрать!
Я знаю, как используйте size_t и ptrdiff_t, когда это уместно, и я использую типы фиксированного размера для хранения и передачи. Мой вопрос касается значений, которые будут храниться только в памяти хост-машины.
Например, структура изображения может содержать следующие члены:
struct image {
integer width, height; /* pixel dimensions of the image */
integer bits_per_pixel;
...
};
Если width и height никогда не превысят SHRT_MAX, следует ли использовать short или придерживаться int? Изображение не может иметь отрицательную ширину или высоту, поэтому используйте беззнаковый тип? Возможно, (u)int_least16_t правильный выбор? Что-то другое?
Если bits_per_pixel никогда не превысит значение 64, используйте char, unsigned char, uint8_t, int или что-то еще?
Что бы вы использовали в этом примере и почему?
Как архитектура ЦП, на которой будет выполняться код, влияет на выбор? например, PPC или x86, 32 или 64 бит.
Как устройство, на котором будет выполняться код, влияет на выбор? например, настольный компьютер, телефон, консоль.
Как выбор связан с производительностью и оптимизацией?
Мой вопрос простыми словами: как вы выбираете, какое целое число использовать?