Определение 32 по сравнению с 64 битами в C++

Взгляните на:

String.fromCharCode(64)

и

String.charCodeAt(0)

первое нужно назвать на Строке класс (буквально String.fromCharCode...) и возвратится (для 64). Второе должно быть выполнено на Строке экземпляр (например, "@@@".charCodeAt...) и возвращается, код Unicode первого символа (эти '0' положение в строке, можно получить коды для других символов в строке путем изменения этого на другое число).

отрывок сценария:

document.write("Unicode for character ਔ is: " + "ਔ".charCodeAt(0) + "<br />");
document.write("Character 2580 is " + String.fromCharCode(2580) + "<br />");

дает:

Unicode for character ਔ is: 2580
Character 2580 is ਔ
127
задан osgx 23 January 2012 в 21:05
поделиться

7 ответов

К сожалению, не существует кроссплатформенного макроса, который определял бы 32/64-разрядность в основных компиляторах. Я нашел наиболее эффективный способ сделать это следующим образом.

Сначала я выбираю собственное представление. Я предпочитаю ENVIRONMENT64 / ENVIRONMENT32. Затем я выясняю, что используют все основные компиляторы для определения 64-битной среды или нет, и использую это для установки своих переменных.

// Check windows
#if _WIN32 || _WIN64
#if _WIN64
#define ENVIRONMENT64
#else
#define ENVIRONMENT32
#endif
#endif

// Check GCC
#if __GNUC__
#if __x86_64__ || __ppc64__
#define ENVIRONMENT64
#else
#define ENVIRONMENT32
#endif
#endif

Другой более простой способ - просто установить эти переменные из командной строки компилятора.

96
ответ дан 24 November 2019 в 00:43
поделиться

Если вы можете использовать конфигурации проекта во всех ваших средах, это упростит определение 64- и 32-битных символов. Таким образом, у вас будут такие конфигурации проекта:

32-разрядная отладка
32-разрядная версия
64-разрядная отладка
64-разрядная версия

РЕДАКТИРОВАТЬ: Это общие конфигурации, а не целевые конфигурации. Называйте их как хотите.

Если вы не можете этого сделать, мне нравится идея Джареда.

1
ответ дан 24 November 2019 в 00:43
поделиться

"Скомпилировано в 64 bit "плохо определен в C ++.

C ++ устанавливает только нижние пределы для размеров, таких как int, long и void * . Нет гарантии, что int будет 64-битным, даже если он скомпилирован для 64-битной платформы. Модель допускает, например, 23-битные int s и sizeof (int *)! = sizeof (char *)

Существуют различные модели программирования для 64-битных платформ.

Лучше всего тестировать платформу. Ваше второе лучшее переносимое решение должно быть более конкретным в , что является 64-битным.

4
ответ дан 24 November 2019 в 00:43
поделиться

Для начала это не сработает в Windows. Longs и int являются 32-битными независимо от того, компилируете ли вы для 32-битных или 64-битных окон. Я бы подумал, что проверка, составляет ли размер указателя 8 байт, вероятно, более надежный путь.

15
ответ дан 24 November 2019 в 00:43
поделиться

Вы должны иметь возможность использовать макросы, определенные в stdint. ч . В частности, INTPTR_MAX - это именно то значение, которое вам нужно.

#include <cstdint>
#if INTPTR_MAX == INT32_MAX
    #define THIS_IS_32_BIT_ENVIRONMENT
#elif INTPTR_MAX == INT64_MAX
    #define THIS_IS_64_BIT_ENVIRONMENT
#else
    #error "Environment not 32 or 64-bit."
#endif

Некоторые (все?) Версии компилятора Microsoft не поставляются с stdint.h . Не знаю почему, поскольку это стандартный файл. Вот версия, которую вы можете использовать: http://msinttypes.googlecode.com/svn/trunk/stdint.h

28
ответ дан 24 November 2019 в 00:43
поделиться
template<int> void DoMyOperationHelper();

template<> void DoMyOperationHelper<4>() 
{
  // do 32-bits operations
}

template<> void DoMyOperationHelper<8>() 
{
  // do 64-bits operations
}

// helper function just to hide clumsy syntax
inline void DoMyOperation() { DoMyOperationHelper<sizeof(size_t)>(); }

int main()
{
  // appropriate function will be selected at compile time 
  DoMyOperation(); 

  return 0;
}
99
ответ дан 24 November 2019 в 00:43
поделиться

Я бы поместил 32-битные и 64-битные исходные коды в разные файлы, а затем выбрал соответствующие исходные файлы с помощью системы сборки.

1
ответ дан 24 November 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: