2016-04-16 7 views
0

Existe-t-il des macros standard pouvant être utilisées pour identifier la taille d'un type primitif au moment de la compilation? Similaires à ceux de GCC:Taille standard de la macro pour les types primitifs

__SIZEOF_INT__ 
__SIZEOF_LONG__ 
__SIZEOF_LONG_LONG__ 
__SIZEOF_SHORT__ 
__SIZEOF_POINTER__ 
__SIZEOF_FLOAT__ 
__SIZEOF_DOUBLE__ 
__SIZEOF_LONG_DOUBLE__ 
__SIZEOF_SIZE_T__ 

Je me souviens avoir vu quelque chose de semblable quelque part, mais la mort de moi, je ne peux pas trouver ou se souvenir de leur nom plus. Celui que je suis le plus intéressé est le type long.

+1

Il n'y a pas de macro std pour déterminer la taille de type primitif. Je suppose que vous pourriez en implémenter un en utilisant les macros de limite. En fonction des valeurs max/min, vous connaissez la taille du type. –

+0

@TrevorHickey: En principe, les types numériques peuvent avoir des bits de remplissage qui ne sont pas reflétés dans leurs plages. –

+1

Quel est le problème avec 'sizeof'? – melak47

Répondre

0

Il n'existe aucune définition de macro standard pour les tailles de types primitifs. Dans boost/atomic, il y a des macros donnant des tailles de types primitifs, elles utilisent entre autres boost/cstdint.hpp. Exemple ressemblerait suit:

#include <iostream> 
#include <boost/atomic.hpp> 

int main() { 
    std::cout << BOOST_ATOMIC_DETAIL_SIZEOF_LONG; 
} 

Référence: http://www.boost.org/doc/libs/1_60_0/boost/atomic/detail/int_sizes.hpp