type int64

_aymeric_

Membre enregistré
3 Juillet 2006
2
0
salut

je porte sous mac une appli windows qui utilise des types __int64
j'ai essayé des
typedef long long int64

mais il m'affiche des erreurs du style "integer constant is too large for long"
lors d'affectations :
const static int64 a = 0x0011223344556677;

j'utilise powerpc-apple-darwin8-g++-4.0.1 sur un powerbook g4. j'ai cherché un peu partout, mais je ne trouve pas de réponse à mon problème. quelqu'un connaît-il un type int64 sous mac ?

merci d'avance
 
pour préciser un peu, j'ai essayé avec le type int64_t (include <stdint.h> et j'ai la même erreur.

ce qui est étonnant, c'est que sizeof me renvoit bien 8 :

sizeof(int64_t) = 8
sizeof(long long) = 8

et
int64_t var = 0xaabbccddeeffaabb;
ou
long long var = 0xaabbccddeeffaabb;

integer constant is too large for 'long' type !?

bizarre non ?
 
:D
:)
:D

_aymeric_ a dit:
pour pr&#233;ciser un peu, j'ai essay&#233; avec le type int64_t (include <stdint.h> et j'ai la m&#234;me erreur.

ce qui est &#233;tonnant, c'est que sizeof me renvoit bien 8 :

sizeof(int64_t) = 8
sizeof(long long) = 8

et
int64_t var = 0xaabbccddeeffaabb;
ou
long long var = 0xaabbccddeeffaabb;

integer constant is too large for 'long' type !?

bizarre non ?

Bloc de code:
/****
////{
    union {
        uint32_t ui_32;
        uint64_t ui_64;
    } val;
    val.ui_64 = (uint64_t)-1;
    
    size_t val_size = sizeof(val);
    
    if (val_size == sizeof(val.ui_32)) {
        // return value from val.ui_32
    } else if (val_size == sizeof(val.ui_64)) {
        // return value from val.ui_64
    }
    
////}
****/
voir aussi

Bloc de code:
<sys/cdefs.h>
<sys/kernel_types.h>
et il n'y a rien de bizarre

typedef ->

__int64 ?
Bloc de code:
unsigned long long int
signed long long int
Bloc de code:
#if defined(_WIN32)
#define int64 __int64
#define uint64 __int64
#elif defined(unix)
#define int64 long long int
#define uint64 unsigned long long int
#endif
[SIZE=+1] bon maintenant faut passer &#224; la caisse

:D

ps je ne connais rien &#224; woinwoin
[/SIZE]

:D

_aymeric_ alors elles sont ou les orties fraiches :D


[SIZE=+1]
[/SIZE]
 
pour finir l'exercice pour les newbs

Bloc de code:
#include <stdio.h>

typedef unsigned long long __int64;

/* typedef long long int __int64; */
/* #include <stdint.h> */
/* typedef int64_t __int64; */
/* tu peux faire des tests supplémentaires */

int main(void)
{
    __int64 i = 0xaabbccddeeffaabb ;
    
    printf("%0.f",(float)i);

    return 1;
}

gcc -m32 test.c -o test
test.c:12: warning: integer constant is too large for 'long' type

gcc -m64 test.c -o test

c'est juste une exception (warning) ton cpu n'est pas un 64-bit Darwin

man gcc

sachant aussi que tu ne dois pas etre expérimenté
car il y a toute une histoire avec le long long ...
tu verras plein d'options à propos de cela

:zen:

une pirouette qui fonctionne
Bloc de code:
/****
////{
    union {
        uint32_t ui_32;
        uint64_t ui_64;
    } val;
    val.ui_64 = (uint64_t)-1;
    
    size_t val_size = sizeof(val);
    
    if (val_size == sizeof(val.ui_32)) {
        // return value from val.ui_32
    } else if (val_size == sizeof(val.ui_64)) {
        // return value from val.ui_64
    }
    
////}
****/
:zen: