BOOL et bool ? - Programmation
Marsh Posté le 09-04-2001 à 17:21:09
Le compilo est content
[edit]--Message édité par zop--[/edit]
Marsh Posté le 09-04-2001 à 18:09:22
avantage:
ca fait chier tout le monde parce qu'on est obligé de tout re-écrire pour compiler avec un autre compilo.
Donc on n'a pas envie de re-écrire, donc on garde le même compilo, à savoir le leur.
donc aucun avantage pour toi
Marsh Posté le 09-04-2001 à 18:31:03
Je ne suis pas sûr de ce que je vais avancer, mais il me semble avoir lu qq part que le transfert et le traitement d'un seul octet etait plus lent que 4 (largeur du BUS)
A confirmer bien sûr...
Marsh Posté le 09-04-2001 à 18:38:50
Je pense que JPA a raison. Si ca vous interesse, je peux me renseigner sur cette question.
Sinon, je pense qu'on utilise BOOL car quand tu utilises une macro pour définir un type, c'est plus facile de redéfinir le type dans tout le prog, puisqu'il suffit de modifier la macro. Donc le code est plus facilement portable.
Ex : INT représente un integer 32 bits sur Win32 (cad int) et un integer 64 bits sur Win64 (cad int64).
Marsh Posté le 09-04-2001 à 18:42:54
Dans le même genre j'ai endentu dire que les calculs en double allaient plus vite qu'en float!
Marsh Posté le 09-04-2001 à 18:56:42
haahhahahaha a écrit a écrit : un BOOL est un int renommé qui prend donc 4 octet. Comme de toute façon cette variable ne prend jamais une autre valeur que 1 ou 0, pourquoi l'API de Windows ne prend pas le type bool du C qui prend un seul octet ? Quel est l'avantage à utiliser BOOL au lieu de bool ? |
Parce que l'API windows est utilisable en C et pas seulement en C++. Par compatibilité avec l'existant , ils ont gardé BOOL dans les MFC. Enfin c'est ce que j'ai lu.
C'est vrai que c'est chiant de monopoliser 32 bits au lieu d'un seul.
Marsh Posté le 09-04-2001 à 18:58:33
non les calculs en double sont plus long et surtout la division qui est tres gourmande. Plus la precision est importante plus c'est long.
Pour les autres operations il n'y a pas de grandes differences entre float et double (+,-,*).
Marsh Posté le 09-04-2001 à 22:37:31
[citation][nom]pourquoi l'API de Windows ne prend pas le type bool du C qui prend un seul octet ?[/citation]
Parce qu'il y a pas de type bool en C, c'est du C++
Marsh Posté le 09-04-2001 à 22:47:30
JPA a écrit a écrit : Je ne suis pas sûr de ce que je vais avancer, mais il me semble avoir lu qq part que le transfert et le traitement d'un seul octet etait plus lent que 4 (largeur du BUS) A confirmer bien sûr... |
Exact, c'est ce qu'on appelle communément les problèmes d'alignement.
A l'époque du vénérable 8086, on alignait sur 2 octets (on travaillait sur 16 bits), et bientôt, on devrait aligner sur 8 (64 bits).
Plus exactement, en raisonnant sur 32 bits, ce n'est pas plus lent de lire un octet plutôt que 4 (ça prend exactement le même temps en fait), dès lors que l'octet unique est dit aligné, c'est-à-dire qu'il démarre sur une adresse qui est un multiple de 4 octets. Ca devient plus lent quand il n'est plus aligné.
Mais vous remarquerez que cela revient alors au même que le booléen ne prenne qu'un octet mais qu'on l'aligne, ou qu'il prenne les 4 octets complets...
[edit]--Message édité par BifaceMcLeOD--[/edit]
Marsh Posté le 10-04-2001 à 07:42:48
Du C++ le bool ?
Dans ce cas je comprends. Faut dire que g pas trop connu l'epoque du C.
Marsh Posté le 10-04-2001 à 07:45:42
Merci pour cette belle réponse qui a fait avancer les choses.
Marsh Posté le 10-04-2001 à 07:50:14
antp a écrit a écrit : Parce qu'il y a pas de type bool en C, c'est du C++ |
Tiens, en voila un qui a perdu une bonne occasion de se taire.
Dans le dernier standard du langage C (C99), un type bool, compatible avec celui du C++ a ete adopte. Son implementation peut etre 1 bit ou 1 byte (recommande pour des raisons evidentes de compatibilite, de fonctionnement de sizeof,...)
Ont aussi ete introduits les types long long et unsigned long long pour l'arithmetique 64 bits, et les types float complex, double complex, long double complex, float imaginary, double imaginary, long double imaginary.
Bon, pour l'instant, il y a pas beaucoup de compilos supportant ce nouveau standard, mais ca viendra.
A+,
[edit]--Message édité par gilou--[/edit]
Marsh Posté le 10-04-2001 à 09:29:37
gilou a écrit a écrit : Tiens, en voila un qui a perdu une bonne occasion de se taire. Dans le dernier standard du langage C (C99), un type bool, compatible avec celui du C++ a ete adopte. Son implementation peut etre 1 bit ou 1 byte (recommande pour des raisons evidentes de compatibilite, de fonctionnement de sizeof,...) Ont aussi ete introduits les types long long et unsigned long long pour l'arithmetique 64 bits, et les types float complex, double complex, long double complex, float imaginary, double imaginary, long double imaginary. Bon, pour l'instant, il y a pas beaucoup de compilos supportant ce nouveau standard, mais ca viendra. A+, |
Si c'est une norme de 99, désolé mais mes cours datent de 98
Marsh Posté le 10-04-2001 à 09:56:26
haahhahahaha a écrit a écrit : un BOOL est un int renommé qui prend donc 4 octet. Comme de toute façon cette variable ne prend jamais une autre valeur que 1 ou 0, pourquoi l'API de Windows ne prend pas le type bool du C qui prend un seul octet ? Quel est l'avantage à utiliser BOOL au lieu de bool ? |
Il n'y a pas d'avantages sinon utiliser des API qui ont ete definie il y a quelques annees (Win NT et Win95) et qui doivent donc compiler avec des progs de cette epoque... quelque soit le langage dans lequel il sont ecrits.
En fait il n'y a aucun avantage, siono de garder une compatibilite...
De plus qui a dit qu'un bool ne prennait qu'un octet ?
Il en prend au moins 1.
la regle est la suivante
sizeof(bool)<sizeof(char)<sizeof(short)<sizeof(int)<sizeof(long)
et bool au moins 1 octet
char au moins 1 octet
short au moins 2
int au moins 2
long au moins 4...
En C/C++ l'arithmetique float est plus lente que la double en theorie car en fait les float sont convertis en double puis le resultat est converti en float (a verifier)
Marsh Posté le 10-04-2001 à 10:18:31
Antp, Oui, en 99, un update majeur du standard a ete adopte.
Si tu lis le C/C++ Dev Journal, il y a eu des articles a ce sujet en octobre et ensuite.
5 nouveaux Keywords: inline, restrict, _Bool, _Complex et _Imaginary.
Il y a des headers stdbool.h, stdint.h, inttypes.h, fpenv.h,...
Il y a les types que j'ai donne dans mon precedent post.
Il y a des spec pour utiliser une machine implementant l'arithmetique en virgule flotante au standard IEEE (avec les NaN, les infinis...)
Il y a differentes autres nouveautes, dont les arrays de taille variable permettant la syntaxe suivante, je crois:
fonction (unsigned int i, autres params...)
{
char tableau[i];
....
}
(peut evidemment pas etre statique le tableau)
Comme en C++, on a:
Les commentaires // sont des commentaires valides (Quelle nouveaute )
les structures if switch while et do sont toutes implementees comme des blocs (% scope)
on peut declarer la variable d'un for localement au for (for (int i=0;...) )
Il y a encore d'autres trucs utiles: une liste declarant un enum peut se terminer par une , sans generer d'erreur.
Il y a une notation avec un . sans rien a gauche utilisee pour initialiser les membres d'un struct.
Il y a un symbole _func_ qui est utilisable comme _FILE_ et _LINE_ et donne le nom de la fonction en cours.
\u suivi de 4 chiffres hexa (resp \U et 8 chiffres hexa) represente les caracteres unicodes (resp ISO10646)
Une des grosses diffs du C99 avec les implems precedentes est que int n'est plus le type par defaut.
Tu peux acheter une version PDF du standard C99 sur le web pour $18 en http://www.techstreet.com/ncitsgate.html (et suit le lien sur le langage C)
A+,
[edit]--Message édité par gilou--[/edit]
Marsh Posté le 10-04-2001 à 10:58:05
Bien que je m'en fou, je sais maintenant que bool vient d'être implémenter dans le language C. Moi j'utilise le C++ (de toutes façon pour les pauvres différences entre le C et le C++).
Donc maintenent je vais utilise le type BOOL qui est apparament meilleur d'après BifaceMcLeOD
Marsh Posté le 10-04-2001 à 10:59:21
Le symbole _func_ est implémenté dans VS.Net Beta 1 ?
Parce que sa a l'aire pas mal...
Marsh Posté le 09-04-2001 à 17:19:21
un BOOL est un int renommé qui prend donc 4 octet.
Comme de toute façon cette variable ne prend jamais une autre valeur que 1 ou 0, pourquoi l'API de Windows ne prend pas le type bool du C qui prend un seul octet ?
Quel est l'avantage à utiliser BOOL au lieu de bool ?