2010-05-14 2 views

ответ

7

LLONG_MAX дает максимальное представимое значение на long long; если ваша реализация не поддерживает long long, она не должна определять LLONG_MAX.

#include <limits.h> 

#ifdef LLONG_MAX 
#define long_long long long 
#else 
#define long_long long 
#endif 

Это не идеальное решение. long long не является стандартным в C++ 03, а long long был дольше, чем C99, поэтому возможно (и, вероятно), что компилятор может поддерживать long long, но не определяет LLONG_MAX.

Если вам нужен целочисленный тип с определенным размером, вы должны использовать <stdint.h>, если его реализация поддерживает его. Если ваша реализация не поддерживает его, Boost has an implementation of it.

+0

@James моя реализация поддерживает (обеспечивает) stdint.h, я нашел там что-то вроде этого: #define _LONGLONG \t __int64, поэтому я понимаю, что я наберу _LONGLONG вместо LLONG_MAX, и все должно быть в порядке? Очень ценю, если бы вы могли ответить на это. Спасибо. –

+0

@ Знание: почему бы просто не использовать типы, определенные в stdint.h? '_LONGLONG' определяется вашей реализацией и не является стандартным, поэтому, если вы хотите написать переносимый код, вы не должны его использовать. –

+0

@James McNellis Я нашел там (stdint.h) что-то вроде этого: UINT64_MAX, если я использую это, я думаю, что все будет хорошо? –

2

Чтобы не беспокоиться о том, определен ли тип с этим именем, я бы #include <climits> и проверить, можно ли найти целочисленный тип, достаточно большой для вашего предполагаемого использования. (Хотя вы, вероятно, просто проверить, если LLONG_MAX определяется, чтобы выяснить, существует long long.)

Edit: Или, если вы можете предположить, C99 заголовки и типы должны быть доступны, #include <cstdint.h> и использовать, например, int64_t, чтобы получить 64-разрядный тип или int_fast64_t, чтобы получить «быстрый» 64-разрядный тип (по определенному определению быстрого компилятора). Или intmax_t, если вы хотите самый большой доступный тип.

Смежные вопросы