Char et bool programmation

Fermé
Kykxs Messages postés 3 Date d'inscription jeudi 24 octobre 2013 Statut Membre Dernière intervention 24 octobre 2013 - 24 oct. 2013 à 17:55
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 25 oct. 2013 à 15:41
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
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
24 oct. 2013 à 23:49
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 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
25 oct. 2013 à 10:40
fiddy, bool est dans ISO C99, non ? Définit dans stdbool.h
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
25 oct. 2013 à 13:42
[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 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié par [Dal] le 25/10/2013 à 14:34
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
25 oct. 2013 à 14:56
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 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié par [Dal] le 25/10/2013 à 15:49
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