Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2421 connectés 

 


Dernière réponse
Sujet : BOOL et bool ?
haahhahahaha et c quoi la différence avec __FUNCTION__ ?

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
haahhahahaha et c quoi la différence avec __FUNCTION__ ?
haahhahahaha Le symbole _func_ est implémenté dans VS.Net Beta 1 ?
Parce que sa a l'aire pas mal...
haahhahahaha 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
gilou 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 :D)
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]

BENB

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)

antp

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 :)

gilou

antp a écrit a écrit :

 
 
Parce qu'il y a pas de type bool en C, c'est du C++ :D




 
 
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]

haahhahahaha Merci pour cette belle réponse qui a fait avancer les choses.
haahhahahaha Du C++ le bool ?
Dans ce cas je comprends. Faut dire que g pas trop connu l'epoque du C.
BifaceMcLeOD

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]

antp [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++ :D
darkoli 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 (+,-,*).
n0mad

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.

Roswell_ Dans le même genre j'ai endentu dire que les calculs en double allaient plus vite qu'en float! :bounce:
bat 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).
JPA 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...
SoWhatIn22 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
zop Le compilo est content :D

 

[edit]--Message édité par zop--[/edit]

haahhahahaha 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 ?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)