Есть ли 64-битный тип, который в каждой ОС (32/64 бит) и для каждого компилятора имеет размер 64?
Тот же вопрос касается и 32-битного типа. (Должно быть int?)
Происхождение вопроса : Я внедряю систему, которая имеет 2 вида инструкций:
Я хочу написать что-то вроде:
typedef int instruction32bit;
typedef long long instruction64bit //it is not correct some system have sizeof(long long) = 128
Если вы хотите, чтобы ваш код был действительно переносимым, то вы, вероятно, захотите определить свой собственный тип и использовать, например,
typedef int32_t instruction32bit;
typedef int64_t instruction64bit;
Это будет работать БОЛЬШЕ времени, но если это не так для конкретной системы / компилятора / чего бы то ни было, вы можете добавить что-то вроде этого:
#ifdef SOMEDEFINE
typedef long long int instruction64bit;
typedef int instruction32bit;
#else
typedef int32_t instruction32bit;
typedef int64_t instruction64bit;
#endif
Конечно, для каждой модели компилятора / ОС (или ее группы), которая не поддерживает int32_t и int64_t, вам, вероятно, понадобится специальный #ifdef
,
Это именно то, что делает весь действительно переносимый код, потому что независимо от того, сколько вы обнаружите, что «почти все компиляторы делают X», если вы сделаете свой код достаточно популярным, всегда найдется кто-то, кто захочет скомпилировать код с «Проектом компилятора Боба», который не имеет этой функции. Конечно, другая вещь состоит в том, чтобы просто заставить тех, кто использует «компилятор Боба», отредактировать саму typedef и не принимать патч «Для компилятора Боба, вам нужен этот …», который неизбежно отправляется на ваш путь.
Как отмечает Карл Норум в комментарии, #ifdef
может быть возможно преобразовать в #if
во многих случаях, а затем использовать общие типы, такие как int
а также long
,
Ты ищешь int64_t
а также int32_t
или их неподписанные друзья uint64_t
а также uint32_t
, Включить либо cinttypes
или же cstdint
.
использование uint_least32_t
а также uint_least64_t
, Типы фиксированного размера uint32_t
а также uint64_t
не будет существовать в системах, которые не имеют точных размеров, которые они описывают.