Одна вещь, которая беспокоит меня в обычных объявлениях целых чисел c, заключается в том, что их имена странные, худшее из которых - long long. Я создаю только для 32- и 64-битных машин, поэтому мне не обязательно нужна переносимость, которую предлагает библиотека, однако мне нравится, что имя для каждого типа представляет собой одно слово одинаковой длины без двусмысленности в размере.
// multiple word types are hard to read
// long integers can be 32 or 64 bits depending on the machine
unsigned long int foo = 64;
long int bar = -64;
// easy to read
// no ambiguity
uint64_t foo = 64;
int64_t bar = -64;
На 32- и 64-битных машинах:
1) Может ли использование меньшего целого числа, такого как int16_t, быть медленнее, чем что-то большее, например int32_t?
2) Если мне нужно, чтобы цикл for запускался всего 10 раз, можно ли использовать наименьшее целое число, которое может его обработать, вместо типичного 32-битного целого числа?
for (int8_t i = 0; i < 10; i++) {
}
3) Когда я использую целое число, которое, как я знаю, никогда не будет отрицательным, можно ли предпочесть версию без знака, даже если мне не нужен дополнительный диапазон в предоставленных?
// instead of the one above
for (uint8_t i = 0; i < 10; i++) {
}
4) Безопасно ли использовать typedef для типов, включенных из stdint.h
typedef int32_t signed_32_int;
typedef uint32_t unsigned_32_int;
изменить: оба ответа были одинаково хороши, и я не мог склоняться к одному, поэтому я просто выбрал ответчика с более низкой репутацией