Cela découle d'une question plus tôt aujourd'hui sur le sujet des bibliothèques BigNum et gcc hacks spécifiques à la langue C Plus précisément, ces deux déclarations ont été utilisés:.Qu'est-ce que GCC __attribute __ ((mode (XX)) ne fait
typedef unsigned int dword_t __attribute__((mode(DI)));
sur les systèmes 32 bits et
typedef unsigned int dword_t __attribute__((mode(TI)));
sur les systèmes 64 bits.
Je suppose donné ceci est une extension du langage C qu'il existe aucun moyen de réaliser ce qu'il réalise dans les normes actuelles (C99). Donc, mes questions sont simples: cette hypothèse est-elle correcte? Et que font ces déclarations à la mémoire sous-jacente? Je pense que le résultat est que j'ai 2*sizeof(uint32_t)
pour un dword
dans les systèmes 32 bits et 2*sizeof(uint64_t)
pour les systèmes 64 bits, ai-je raison?
Tout ce que je avais besoin, +1. N'y a-t-il pas un moyen "standard" de contourner cela, je suppose? c'est-à-dire déclarer un type de 128 bits? Dans son utilisation actuelle, nous pouvons 'dword = mot << 1' en toute sécurité et facilement; Je préfère ne pas remplacer cela avec une fonction, etc si je peux l'aider. –
@Ninefingers: Dans GCC, vous pouvez utiliser '__int128' je crois: http://gcc.gnu.org/onlinedocs/gcc/_005f_005fint128.html. –
@Ninefingers: GCC prend en charge les types d'extension '__int128_t' et' __uint128_t' (au moins sur les plates-formes 64 bits, pas sûr des cibles 32 bits) –