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 :

Type bool : est-ce du C ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Citation Envoyé par lilington Voir le message
    je me demande si bool c'est du C?
    C'est du C99 : http://nicolasj.developpez.com/articles/c99/#LV-E

  2. #2
    Membre extrêmement actif
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Par défaut
    merci pour l'info du coup je comprend mieu pourquoi je voyais des BOOL et des bool.
    donc si je ne me trompe pas BOOL c'est C++ et bool c'est C ?
    bref jamais utilise car ignorant que ca existais en C je preferais utiliser 8bit (char) pour mes bool

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Citation Envoyé par lilington Voir le message
    donc si je ne me trompe pas BOOL c'est C++ et bool c'est C ? bref jamais utilise car ignorant que ca existais en C je preferais utiliser 8bit (char) pour mes bool
    Non, je crois que c'est « bool » dans les deux cas. C'est juste que C99 en a profité pour normaliser pas mal de goodies introduites par le C++, comme les commentaires sur une seule ligne « // ».

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Pour compléter, BOOL c'est généralement un typedef largement utilisé dans de nombreuses bibliothèques. Dans l'API Windows par exemple, BOOL est un typedef de int (cf. windef.h).

  5. #5
    Membre extrêmement actif
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Par défaut
    Merci mais bon deja c'est pas un type generique,
    j'ai fait par defaut erreur de compilation,donc j'ai vu qu'il fallait inclure un truc, (GCC)
    mais ca ca marche: sans rien avoir a inclure.

    Pour compléter, BOOL c'est généralement un typedef largement utilisé dans de nombreuses bibliothèques. Dans l'API Windows par exemple, BOOL est un typedef de int (cf. windef.h).
    dans ce cas je continue avec mes unsigned char drp =0 ou = 1 pour representer mes bools car faire appelle a un int n'est en rien plus economique qu'un uchar.

  6. #6
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par lilington Voir le message
    Merci mais bon deja c'est pas un type generique,
    j'ai fait par defaut erreur de compilation,donc j'ai vu qu'il fallait inclure un truc, (GCC)
    mais ca ca marche: sans rien avoir a inclure.
    C'est pas sympa d'ignorer les liens que les gens te donnent. Le contenu était ceci :
    Citation Envoyé par Les nouveautés du C99 > V-E. Le type booléen
    Un booléen est un nouveau type de variable qui peut prendre uniquement la valeur vrai ou faux. La définition du type bool est faite dans le fichier d'en-tête stdbool.h et contient les définitions suivantes :
    • bool : le type booléen
    • true : la valeur vrai
    • false : la valeur faux
    • __bool_true_false_are_defined : si cette macro est définie, les valeurs bool, true et false le sont aussi.

    La définition du type bool a été placée dans un fichier d'en-tête pour garantir la compatibilité avec les anciens codes (il n'est pas rare de voir un code contenant déjà une définition de bool). Si, pour une raison quelconque, vous ne souhaitez pas inclure stdbool.h, le langage contient le type _Bool qui peut prendre les valeurs 0 (faux) et 1 (vrai).
    Citation Envoyé par lilington Voir le message
    Pour compléter, BOOL c'est généralement un typedef largement utilisé dans de nombreuses bibliothèques. Dans l'API Windows par exemple, BOOL est un typedef de int (cf. windef.h).
    dans ce cas je continue avec mes unsigned char drp =0 ou = 1 pour representer mes bools car faire appelle a un int n'est en rien plus economique qu'un uchar.
    Dans ce cas, je t'encourage aussi à utiliser les champs de bits partout dans tes programmes, à chaque fois que c'est avantageux. Tes variables booléennes par exemple ne prendront plus qu'un bit et pas plus en mémoire, c'est encore plus économique non ?

    Bon, revenons au vrai problème : est-ce que char est vraiment plus économique que int ? Pour répondre à cela, supposons que nous sommes sur une architecture PC où un char = 8 bits et int = 32 bits.

    1. Dans de nombreux cas, les plus fréquents en plus, l'utilisation de char à la place de int ne réduit pas la mémoire utilisée par le programme, à cause des contraintes d'alignement. Par exemple, les fonctions suivantes requièrent la même quantité de mémoire à l'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int f_version_char_1(char c)
    {
        int n;
        n = c;
        return n;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int f_version_int_1(int c)
    {
        int n;
        n = c;
        return n;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int f_version_char_2(void)
    {
        int n;
        char c = 1;
        n = c;
        return n;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int f_version_int_2(void)
    {
        int n;
        int c = 1;
        n = c;
        return n;
    }
    En effet, dans tous les cas, c est empilé avant n mais à cause des contraintes d'alignement, n doit se localiser à une adresse multiple de 4, donc le fait d'avoir utilisé char à la place de int pour c ne nous fait pas gagner le moindre octet. Au contraire, en utilisant int au lieu de char, nous gérons mieux la mémoire.

    Autre exemple, retourner un char au lieu d'un int n'économise rien du tout.

    Bon, je me limiterai à ces quelques exemples.

    2. Les opérations sur des int s'exécutent plus vite que les opérations sur des char. Cela signifie que l'instruction a = b && c; par exemple s'exécutera plus vite si a, b et c sont des int que si elles étaient des char. En effet dans la pratique, le type int correspond au type entier natif du processeur, c'est-à-dire le type entier avec lequel le processeur travaille avec sa performance maximale.

    En outre, en langage C, les expressions logiques sont réellement de type int. Pas char ni unsigned char ni _Bool mais int. Par exemple, ('A' == 'a'), (11 != 20) et (0.5 > 1.0) sont des expressions de type int. Leurs valeurs respectives sont 0, 1 et 0. Ainsi, utiliser int pour représenter une expression ou une valeur booléenne est vraiment tout sauf farfelu ou bizarre.

    Cela dit, la taille du type _Bool du C99 est généralement de 1 byte, bien que la norme ne l'impose pas. Byte ou int pour une variable booléenne n'est pas une question à laquelle on peut trancher de manière catégorique. Tout dépend des contraintes et des objectifs que l'on se fixe. Personnellement, lorsqu'on hésite, je recommande tout simplement d'utiliser int.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/05/2006, 12h30
  2. 3 question sur le "type BOOL" en C
    Par Biosox dans le forum C
    Réponses: 9
    Dernier message: 29/03/2006, 10h18
  3. type bool en C
    Par rbanana dans le forum C
    Réponses: 9
    Dernier message: 17/03/2006, 20h50
  4. Type bool, le coder sur 1bit
    Par Zenol dans le forum C++
    Réponses: 20
    Dernier message: 19/12/2005, 21h54
  5. Question sur le type bool
    Par gentox dans le forum C
    Réponses: 3
    Dernier message: 05/12/2005, 18h55

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