Char et bool programmation

Kykxs Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'ai un problème. je dois créér un programme qui doit tester mon environnement (windows 7 et netbean) avec toutes les sorte de types comme int, float, etc... mais j'ai un problème avec les char et les bool. comment déclarer un char et le incrémenter au dessus de sa valeur limite. Même chose pour les bool.

Merci de m'aidez

Kykxs

1 réponse

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Les bool n'existent pas en C.
Les char existent. C'est un byte d'au moins 8 bits. Tu peux changer sa valeur dans limits.h
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
fiddy, bool est dans ISO C99, non ? Définit dans stdbool.h
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
[Dal],
Très juste. Mais ce n'est pas un type générique pour moi. Cela pointe vers le type _Bool qui est un int...
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
le standard dit seulement que bool est une macro correspondant à _Bool (et que true et false sont aussi des macros et leurs valeurs 1 et 0), et assez grand pour stocker les valeurs 0 et 1. C'est vrai que c'est un peu un type de "seconde zone", et que, bizarrement, le standard n'interdit pas de retirer la définition ou de redéfinir bool, true ou false (!). C'est une possibilité marquée comme étant obsolète dans C99 (et C11), mais c'est quand même un peu bizarre.

Cependant, du point de vue des termes, le standard C99 (et C11) parle bien de "type" "bool", et tu peux le caster, comme un autre type.

#include <stdio.h>
#include <stdbool.h>


int main(void)
{
printf("%d\n", (bool)12);

return 0;
}

donne :
1
(ce comportement est définit dans le standard aussi)

Sinon, j'avoue que je n'ai pas compris la question de Kykxs, ni ta réponse (changer limits.h ?).


Dal
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Tu peux également caster une structure, cela n'en fait pas pour autant un type générique...
Bref pour moi vu que ce n'est pas générique, cela n'a pas trop de sens contrairement au C++ où cela en aurait plus.
Pour le char, c'est un byte d'au moins 8 bits. Tu peux donc très bien dire qu'il fait plus que 255 en valeur max non signé.
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
Oui, tu peux caster des structures et types définis par l'utilisateur, mais, lorsque tu fais cela, il faut bien savoir ce que tu fais, et que les données aient un sens ainsi castées. Là, comme tu le vois, ce cast opère un changement de la valeur numérique en forçant le contenu à une valeur de 0 ou 1. C'est bien parce que le compilateur a intégré que ce type ne peut recevoir que ces deux valeurs, et pas n'importe quel entier comme on pourrait le supposer lorsque tu disais, qu'en fait, c'est un "int". D'ailleurs, je ne vois nulle part que ce soit définit comme un "int".

Si par "type générique" il faut entendre "type définit comme une type standard du langage" (par opposition à des types définis par l'utilisateur sous la forme de typedef), alors, AMHA, bool est un type en C à partir de C99, car il est définit en tant que tel.

OK, le char, je pense avoir compris le sens de ta réponse : pour "déclarer un char et l'incrémenter au dessus de sa valeur limite" il suffit d'augmenter sa valeur limite, et on peut alors l'incrémenter (au delà de son ancienne valeur limite.. bien sûr, il faut que cela ait un sens pour le matériel considéré... et je ne pense pas que le changement de la valeur de limits.h ait un impact sur le comportement de l'incrémentation, le C ne faisant normalement pas de contrôle de débordement de la limite de capacité). Mais je ne pense pas que cela soit ce qu'il veut faire. Je pense qu'il veut simplement ajouter 1 au dessus de la valeur limite de char définie par son implémentation (ou de unsigned char, ce n'est pas clair), et "voir ce qui se passe".

Mais je peux me tromper, car, comme je l'ai dit, je ne suis pas sûr de bien comprendre sa question.


Dal
0