IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Les "long long int"


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut Les "long long int"
    Salut!

    Dans le header "limits.h" on trouve:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #if	!defined(__STRICT_ANSI__) && defined(__GNUC__)
     
    #define LONG_LONG_MAX	9223372036854775807LL
    #define LONG_LONG_MIN	(-LONG_LONG_MAX-1)
     
    #define ULONG_LONG_MAX	(2ULL * LONG_LONG_MAX + 1)
     
    /* ISO C9x macro names */
    #define LLONG_MAX LONG_LONG_MAX
    #define LLONG_MIN LONG_LONG_MIN
    #define ULLONG_MAX ULONG_LONG_MAX
    Or sous Windows XP avec DevC++, donc avec gcc, l'appel à ces constantes est impossible, donc une des conditions n'est pas valide, c'est "__STRICT_ANSI__", qui est définie.
    De plus le formateur "%ll" n'est pas reconnu.

    En revanche la déclaration d'un "long long int n" ne pose pas de problème et "sizeof n*CHAR_BIT" renvoie bien 64.

    Que peut on en conclure quand à l'utilisation des "long long int" dans ce contexte?

    Merci de vos réponses.

  2. #2
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Que peut on en conclure quand à l'utilisation des "long long int" dans ce contexte?
    Juste que la compilation ne devrait pas se faire ! Pense à bien paramètrer le compilateur.

  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Pense à bien paramètrer le compilateur.
    Pourtant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    -std=c99
    -O2 -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int
    -Werror-implicit-function-declaration -Wmain -Wparentheses -Wsequence-point
    -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized
    -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wpointer-arith
    -Wbad-function-cast -Wwrite-strings -Wconversion -Wsign-compare
    -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes
    -Wmissing-declarations -Wmissing-noreturn -Wformat
    -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked
    -Wredundant-decls -Wnested-externs -Winline -Wlong-long
    -Wunreachable-code

  4. #4
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    C'est ton std=c99 qui fait que tu peux utiliser le type long long.

    On peux presque en conclure qu'il y a souci quelque par du coté de l'inclusion des fichiers d'en-tête... ou même de la version de ce même fichier d'entête puisque les lignes que tu donnes demandent de ne pas inclure les définitions si tu es ansi strict. (c99 est-il ansi strict?)

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 119
    Par défaut
    long long c'est pas la norme c99 ? si il me semble, tu doit alors avec ton compilo rajouter -std=c99

  6. #6
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    -std=c99
    -O2 -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int
    -Werror-implicit-function-declaration -Wmain -Wparentheses -Wsequence-point
    -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized
    -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wpointer-arith
    -Wbad-function-cast -Wwrite-strings -Wconversion -Wsign-compare
    -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes
    -Wmissing-declarations -Wmissing-noreturn -Wformat
    -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked
    -Wredundant-decls -Wnested-externs -Winline -Wlong-long
    -Wunreachable-code
    Un problème de vue ?

  7. #7
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par deck_bsd
    long long c'est pas la norme c99 ? si il me semble, tu doit alors avec ton compilo rajouter -std=c99
    un p'tit café peut être :
    Citation Envoyé par seriousme
    Citation Envoyé par PRomu@ld
    C'est ton qui fait que tu peux utiliser le type .

    On peux presque en conclure qu'il y a souci quelque par du coté de l'inclusion des fichiers d'en-tête... ou même de la version de ce même fichier d'entête puisque les lignes que tu donnes demandent de ne pas inclure les définitions si tu es ansi strict. (c99 est-il ansi strict?)
    Normalement ansi strict c'est l'option -ansi donc -std=c90 mais ce n'est qu'une supposition, faudrait essayer sans pour voir.

  8. #8
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Hello,

    Citation Envoyé par seriousme
    Salut!

    Dans le header "limits.h" on trouve:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #if	!defined(__STRICT_ANSI__) && defined(__GNUC__)
     
    #define LONG_LONG_MAX	9223372036854775807LL
    #define LONG_LONG_MIN	(-LONG_LONG_MAX-1)
     
    #define ULONG_LONG_MAX	(2ULL * LONG_LONG_MAX + 1)
     
    /* ISO C9x macro names */
    #define LLONG_MAX LONG_LONG_MAX
    #define LLONG_MIN LONG_LONG_MIN
    #define ULLONG_MAX ULONG_LONG_MAX
    Or sous Windows XP avec DevC++, donc avec gcc, l'appel à ces constantes est impossible, donc une des conditions n'est pas valide, c'est "__STRICT_ANSI__", qui est définie.
    De plus le formateur "%ll" n'est pas reconnu.

    En revanche la déclaration d'un "long long int n" ne pose pas de problème et "sizeof n*CHAR_BIT" renvoie bien 64.

    Que peut on en conclure quand à l'utilisation des "long long int" dans ce contexte?

    Merci de vos réponses.
    Contrairement à ce que l'on peut penser __STRICT_ANSI__ n'est pas défini seulement pour -ansi, mais aussi pour -std=..., apparemment aussi si c'est c99 et pas seulement c89 ou c90.

    http://gcc.gnu.org/onlinedocs/gcc-4....defined-Macros

    C'est un problème de ton implémentation (Hou la bonne blague) => Dev-C++ utilise MinGW => implémentation de gcc pas prête pour C99. Avec djgpp ou cygwin, ces macros sont correctement définies.

    A+

  9. #9
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Et juste comme ça, est-ce qu'un -pedantic ne permettrait pas d'afficher les bon warning ?

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par Foobar1329
    Hello,
    Contrairement à ce que l'on peut penser __STRICT_ANSI__ n'est pas défini seulement pour -ansi, mais aussi pour -std=..., apparemment aussi si c'est c99 et pas seulement c89 ou c90.
    Euh... La doc ne parle pas de __STDC__ ...
    Normalement, c'est cette macro-là qui est définie en C99...

    C'est un problème de ton implémentation (Hou la bonne blague) => Dev-C++ utilise MinGW => implémentation de gcc pas prête pour C99. Avec djgpp ou cygwin, ces macros sont correctement définies.
    A+
    Le GCC de Dev-C++ accepte -std=c99
    Edit : On peut plus faire un abus de langage, à présent... Pffff...
    Le problème, si j'ai bien compris, c'est que les long long sont disponibles mais leurs constantes n'apparaissent pas dans <limits.h> ?

    seriousme: Oui, c'est que les auteurs de mingW n'ont pas pensé à changer cela.
    On peut faire un bug report?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    Le GCC de Dev-C++ est compatible C99 (en tout cas, il accepte -std=c99)
    Ca c'est une nouvelle ! gcc supporterait c99 (et en plus sous windows et dev-c++ !)

    Même la page officielle ne fait pas support complet du c99...

    http://gcc.gnu.org/c99status.html

    Citation:
    Foobar1329 a écrit :
    Hello,
    Contrairement à ce que l'on peut penser __STRICT_ANSI__ n'est pas défini seulement pour -ansi, mais aussi pour -std=..., apparemment aussi si c'est c99 et pas seulement c89 ou c90.

    Euh... La doc ne parle pas de __STDC__ ...
    Normalement, c'est cette macro-là qui est définie en C99...
    __STRICT_ANSI__ devrait être définie pour l'option -ansi. Le man est d'ailleur très explicite :

    The macro "__STRICT_ANSI__" is predefined when the -ansi option is used

  12. #12
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Citation Envoyé par PRomu@ld
    Ca c'est une nouvelle ! gcc supporterait c99 (et en plus sous windows et dev-c++ !)

    Même la page officielle ne fait pas support complet du c99...

    http://gcc.gnu.org/c99status.html



    __STRICT_ANSI__ devrait être définie pour l'option -ansi. Le man est d'ailleur très explicite :
    C'est ce que je dis, mais je parle pas bien la France (intervertir les mots 'seulement' et 'défini', c'esr peut être plus clair ). Lire __STRICT_ANSI__ est défini pour -ansi ET AUSSI pour -std=...

    dixit la page du manuel du prépro gcc que j'ai donné en lien.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. décallage sur long long int
    Par trax44 dans le forum C
    Réponses: 9
    Dernier message: 26/02/2006, 11h41
  2. MyISAM & les accès concurrentiels: le "miracle"
    Par twkjp dans le forum Outils
    Réponses: 3
    Dernier message: 09/09/2005, 17h02
  3. [cr 8.5] comment exploiter les données d'un "array"
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 12
    Dernier message: 09/06/2005, 14h03
  4. [Transtypage] Long en int
    Par Bugmaster dans le forum Langage
    Réponses: 2
    Dernier message: 20/09/2004, 09h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo