кроссплатформенный 64-битный тип

Есть ли 64-битный тип, который в каждой ОС (32/64 бит) и для каждого компилятора имеет размер 64?

Тот же вопрос касается и 32-битного типа. (Должно быть int?)

Происхождение вопроса : Я внедряю систему, которая имеет 2 вида инструкций:

  1. 32 бит
  2. 64 бит

Я хочу написать что-то вроде:

typedef int instruction32bit;

typedef long long instruction64bit //it is not correct some system have sizeof(long long) = 128

2

Решение

Если вы хотите, чтобы ваш код был действительно переносимым, то вы, вероятно, захотите определить свой собственный тип и использовать, например,

   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,

3

Другие решения

Ты ищешь int64_t а также int32_tили их неподписанные друзья uint64_t а также uint32_t, Включить либо cinttypes или же cstdint.

7

использование uint_least32_t а также uint_least64_t, Типы фиксированного размера uint32_t а также uint64_t не будет существовать в системах, которые не имеют точных размеров, которые они описывают.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector