Esto surgió de una pregunta el día de hoy sobre el tema de las bibliotecas bignum y hacks específicos GCC para el lenguaje C Específicamente, se utilizaron estas dos declaraciones:?.¿Qué GCC __attribute __ ((modo (XX)) realmente hacen
typedef unsigned int dword_t __attribute__((mode(DI)));
en sistemas de 32 bits y
typedef unsigned int dword_t __attribute__((mode(TI)));
en los sistemas de 64 bits.
que asumir en esto es una extensión del lenguaje C que no existe una manera de lograr lo que se consigue en los estándares actuales (C99).
Así que mis preguntas son simples: ¿esa suposición es correcta? ¿Y qué hacen estas declaraciones a la memoria subyacente? Creo que el resultado es que tengo 2*sizeof(uint32_t)
para un dword
en sistemas de 32 bits y 2*sizeof(uint64_t)
para sistemas de 64 bits, ¿estoy en lo correcto?
Justo lo que necesitaba, 1. ¿No hay una forma "estándar" de evitar esto entonces, lo tomo? es decir, declarar decir un tipo de 128 bits? En su uso actual, podemos 'dword = word << 1' de forma segura y sencilla; Prefiero no reemplazar eso con una función, etc. si puedo evitarlo. –
@Ninefingers: En GCC puedes usar '__int128' Creo: http://gcc.gnu.org/onlinedocs/gcc/_005f_005fint128.html. –
@Ninefingers: GCC admite los tipos de extensión '__int128_t' y' __uint128_t' (al menos en plataformas de 64 bits, no está seguro acerca de los destinos de 32 bits) –