2013-04-30 21 views
18

UINT_MAXunsigned int için uint64_t maksimum değerini temsil eden bir makroyu arıyorum. i.e. Bu değere (1 < < 64) -1 olması garantilidir. uint64_t için maksimum değeri temsil eden makro

Ben UINT64_MAX kullanmaya çalıştı, ama g ++ sonuçlarla derleme:

'UINT64_MAX' was not declared in this scope 

O UINT64_MAX kullanmadan önce ben kodunda bu satırı #define __STDC_LIMIT_MACROS zorunda söz değer.

Bu konuda web hakkında yararlı bilgiler bulamadığım için şaşırdım.

+0

idk ne '#define __STDC_LIMIT_MACROS'dur, ancak muhtemelen 'UINTwhatever' –

+0

C++ 11 uygulamalarının kullanılmasından önce, 'Ust64_MAX' sağlayan 'cstdint' ile birlikte kullanmadan önce içeriklerini daha önce de isteyebilirsiniz. Boost, eğer mevcutsa, bu başlığın bir uygulamasını da sağlar. – pmr

+7

Neden C++ makroda? Std :: numeric_limits :: max() 'çalışmıyor mu? –

cevap

14

cstdint başlığını taşınabilir şekilde kullanmak oldukça zor olabilir (bazı MSVC uygulamalarından yoksundur). numeric_limits::max() aynı zamanda constexpr olmadan kullanmak zor olabilir ve aslında uint64_t ile çalışmak için gerekli değildir. Bu şeyleri çok fazla önemsemezseniz, std::numeric_limits<uint64_t>::max() büyük ihtimalle hile yapacaktır.

Boost.Integercstdint'un bir uygulamasına sahiptir ve sabit bir maksimum değer elde etmek için ekstra bir özellik sınıfı ile birlikte gelir. cstdint'un uyumlu bir uygulaması, UINT64_MAX makrosunu da sağlamalıdır, ancak destek konusunda emin değilim.

+0

I ikinci boost tamsayı. Sadece üstbilgiye inanıyorum ve çoğu derleyicinin herhangi bir yerinde kullanılabilir. –

+0

Detaylı cevap için teşekkürler. Sadece merak etmek niçin UINT_MAX olarak onun için bir makro yok, fonksiyon çağrısını kaydetmek için? – Subway

+1

@Subway C++ 11'de numeric_limits ile hiçbir işlev çağrısı yoktur, çünkü max constexpr'dir. – pmr

İlgili konular