__LP64__ в Windows?

Я знаю, что Windows использует LLP вместо модели данных LP, но есть ли предопределенная переменная или что-то еще? на OS X/Linux вы можете использовать __LP64__,

3 ответа

Один из способов проверить это с _WIN64, который определяется только на 64-битной Windows (см. здесь и здесь). Например:

#if defined(__LP64__)
// LP64 machine, OS X or Linux
#elif defined(_WIN64)
// LLP64 machine, Windows
#else
// 32-bit machine, Windows or Linux or OS X
#endif

Я не знаю, если такая переменная, но вы можете проверить на _MSC_VER, который будет определен в Visual Studio. Затем вы можете принять модель LLP. Если это когда-нибудь изменится в будущем, вы можете использовать значение _MSC_VER проверить против версий компилятора.

Если вы ищете типы стандартного размера, проверьте boost:: integer, который определяет целочисленные типы фиксированного размера.

Вам действительно нужна переменная препроцессора (в зависимости от случая, она может потребоваться, но вы также можете обойтись без)? Является sizeof(long) == sizeof(void*) не достаточно хорош?

Другие вопросы по тегам