In article ,
James Kanze wrote:Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Tu es un peu traditionnel et en retard. Ca m'etonnerait beaucoup
que les versions *recentes* des environnements de travail Windows
et Solaris n'aient pas stdint.h.
Les choses evoluent vite. Il y a trois ans, c'etait courant de ne
pas avoir stdint.h. Aujourd'hui, ca denote de serieuses lacunes
de mise-a-jour...
In article <1181720884.655308.143240@o11g2000prd.googlegroups.com>,
James Kanze <james.kanze@gmail.com> wrote:
Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Tu es un peu traditionnel et en retard. Ca m'etonnerait beaucoup
que les versions *recentes* des environnements de travail Windows
et Solaris n'aient pas stdint.h.
Les choses evoluent vite. Il y a trois ans, c'etait courant de ne
pas avoir stdint.h. Aujourd'hui, ca denote de serieuses lacunes
de mise-a-jour...
In article ,
James Kanze wrote:Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Tu es un peu traditionnel et en retard. Ca m'etonnerait beaucoup
que les versions *recentes* des environnements de travail Windows
et Solaris n'aient pas stdint.h.
Les choses evoluent vite. Il y a trois ans, c'etait courant de ne
pas avoir stdint.h. Aujourd'hui, ca denote de serieuses lacunes
de mise-a-jour...
In article ,
James Kanze wrote:Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Tu es un peu traditionnel et en retard. Ca m'etonnerait beaucoup
que les versions *recentes* des environnements de travail Windows
et Solaris n'aient pas stdint.h.
En fait, stdint n'est pas présent sous windows:
http://en.wikipedia.org/wiki/Stdint.h
<quote>
As stdint.h is currently NOT shipped with visual studio c++ products and
older c++ compilers, you may want to use some external one.
* pstdint.h - A cross-platform, free implementation from Paul
Hsieh. (Compilers tested (all with 0 warnings at their highest
respective settings): Borland Turbo C 2.0, WATCOM C/C++ 11.0 (16 bits
and 32bits), Microsoft Visual C++ 6.0 (32 bit), Microsoft Visual
Studio.net (VC7), Intel C++ 4.0, GNU gcc v3.3.3)
* stdint.h - This stdint.h may be used with Microsoft compilers
only. But it fully C99 compliant and may be used with similar
inttypes.h. Tested with Microsoft Visual Studio .NET 2003 and Microsoft
Visual Studio .NET 2005.
</quote>
Sous solaris, il faut utiliser <inttypes.h> à la place.
Les choses evoluent vite. Il y a trois ans, c'etait courant de ne
pas avoir stdint.h. Aujourd'hui, ca denote de serieuses lacunes
de mise-a-jour...
L'intérèt de stdint est quand même marginal. J'utilise des uint8 ...
internes depuis longtemps. Le seul intérêt de l'intégrer dans le
standard est de ne pas re-inventer la roue.
In article <1181720884.655308.143240@o11g2000prd.googlegroups.com>,
James Kanze <james.kanze@gmail.com> wrote:
Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Tu es un peu traditionnel et en retard. Ca m'etonnerait beaucoup
que les versions *recentes* des environnements de travail Windows
et Solaris n'aient pas stdint.h.
En fait, stdint n'est pas présent sous windows:
http://en.wikipedia.org/wiki/Stdint.h
<quote>
As stdint.h is currently NOT shipped with visual studio c++ products and
older c++ compilers, you may want to use some external one.
* pstdint.h - A cross-platform, free implementation from Paul
Hsieh. (Compilers tested (all with 0 warnings at their highest
respective settings): Borland Turbo C 2.0, WATCOM C/C++ 11.0 (16 bits
and 32bits), Microsoft Visual C++ 6.0 (32 bit), Microsoft Visual
Studio.net (VC7), Intel C++ 4.0, GNU gcc v3.3.3)
* stdint.h - This stdint.h may be used with Microsoft compilers
only. But it fully C99 compliant and may be used with similar
inttypes.h. Tested with Microsoft Visual Studio .NET 2003 and Microsoft
Visual Studio .NET 2005.
</quote>
Sous solaris, il faut utiliser <inttypes.h> à la place.
Les choses evoluent vite. Il y a trois ans, c'etait courant de ne
pas avoir stdint.h. Aujourd'hui, ca denote de serieuses lacunes
de mise-a-jour...
L'intérèt de stdint est quand même marginal. J'utilise des uint8 ...
internes depuis longtemps. Le seul intérêt de l'intégrer dans le
standard est de ne pas re-inventer la roue.
In article ,
James Kanze wrote:Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Tu es un peu traditionnel et en retard. Ca m'etonnerait beaucoup
que les versions *recentes* des environnements de travail Windows
et Solaris n'aient pas stdint.h.
En fait, stdint n'est pas présent sous windows:
http://en.wikipedia.org/wiki/Stdint.h
<quote>
As stdint.h is currently NOT shipped with visual studio c++ products and
older c++ compilers, you may want to use some external one.
* pstdint.h - A cross-platform, free implementation from Paul
Hsieh. (Compilers tested (all with 0 warnings at their highest
respective settings): Borland Turbo C 2.0, WATCOM C/C++ 11.0 (16 bits
and 32bits), Microsoft Visual C++ 6.0 (32 bit), Microsoft Visual
Studio.net (VC7), Intel C++ 4.0, GNU gcc v3.3.3)
* stdint.h - This stdint.h may be used with Microsoft compilers
only. But it fully C99 compliant and may be used with similar
inttypes.h. Tested with Microsoft Visual Studio .NET 2003 and Microsoft
Visual Studio .NET 2005.
</quote>
Sous solaris, il faut utiliser <inttypes.h> à la place.
Les choses evoluent vite. Il y a trois ans, c'etait courant de ne
pas avoir stdint.h. Aujourd'hui, ca denote de serieuses lacunes
de mise-a-jour...
L'intérèt de stdint est quand même marginal. J'utilise des uint8 ...
internes depuis longtemps. Le seul intérêt de l'intégrer dans le
standard est de ne pas re-inventer la roue.
In article <466fda79$0$14118$,
Michael DOUBEZ wrote:In article ,
James Kanze wrote:Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Tu es un peu traditionnel et en retard. Ca m'etonnerait beaucoup
que les versions *recentes* des environnements de travail Windows
et Solaris n'aient pas stdint.h.
En fait, stdint n'est pas présent sous windows:
http://en.wikipedia.org/wiki/Stdint.h [snip]
Beurk, au secours, tout ca.Sous solaris, il faut utiliser <inttypes.h> à la place.
inttypes est complementaire de stdint.h...Les choses evoluent vite. Il y a trois ans, c'etait courant de ne
pas avoir stdint.h. Aujourd'hui, ca denote de serieuses lacunes
de mise-a-jour...
L'intérèt de stdint est quand même marginal. J'utilise des uint8 ...
internes depuis longtemps. Le seul intérêt de l'intégrer dans le
standard est de ne pas re-inventer la roue.
A la reflexion, ca ne me surprend pas... le principal interet de stdint.h,
c'est la portabilite. Et on sait bien que windows n'en a rien a battre
de la portabilite....
In article <466fda79$0$14118$426a34cc@news.free.fr>,
Michael DOUBEZ <michael.doubez@free.fr> wrote:
In article <1181720884.655308.143240@o11g2000prd.googlegroups.com>,
James Kanze <james.kanze@gmail.com> wrote:
Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Tu es un peu traditionnel et en retard. Ca m'etonnerait beaucoup
que les versions *recentes* des environnements de travail Windows
et Solaris n'aient pas stdint.h.
En fait, stdint n'est pas présent sous windows:
http://en.wikipedia.org/wiki/Stdint.h [snip]
Beurk, au secours, tout ca.
Sous solaris, il faut utiliser <inttypes.h> à la place.
inttypes est complementaire de stdint.h...
Les choses evoluent vite. Il y a trois ans, c'etait courant de ne
pas avoir stdint.h. Aujourd'hui, ca denote de serieuses lacunes
de mise-a-jour...
L'intérèt de stdint est quand même marginal. J'utilise des uint8 ...
internes depuis longtemps. Le seul intérêt de l'intégrer dans le
standard est de ne pas re-inventer la roue.
A la reflexion, ca ne me surprend pas... le principal interet de stdint.h,
c'est la portabilite. Et on sait bien que windows n'en a rien a battre
de la portabilite....
In article <466fda79$0$14118$,
Michael DOUBEZ wrote:In article ,
James Kanze wrote:Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Tu es un peu traditionnel et en retard. Ca m'etonnerait beaucoup
que les versions *recentes* des environnements de travail Windows
et Solaris n'aient pas stdint.h.
En fait, stdint n'est pas présent sous windows:
http://en.wikipedia.org/wiki/Stdint.h [snip]
Beurk, au secours, tout ca.Sous solaris, il faut utiliser <inttypes.h> à la place.
inttypes est complementaire de stdint.h...Les choses evoluent vite. Il y a trois ans, c'etait courant de ne
pas avoir stdint.h. Aujourd'hui, ca denote de serieuses lacunes
de mise-a-jour...
L'intérèt de stdint est quand même marginal. J'utilise des uint8 ...
internes depuis longtemps. Le seul intérêt de l'intégrer dans le
standard est de ne pas re-inventer la roue.
A la reflexion, ca ne me surprend pas... le principal interet de stdint.h,
c'est la portabilite. Et on sait bien que windows n'en a rien a battre
de la portabilite....
le header ressemble à:
typedef signed char sint8
#if ( sizeof(sint8) != 8 )
#error "Wrong size: sint8 - shoulb be 8"
#endif // ( sizeof(sint8) != 8 )
...
le header ressemble à:
typedef signed char sint8
#if ( sizeof(sint8) != 8 )
#error "Wrong size: sint8 - shoulb be 8"
#endif // ( sizeof(sint8) != 8 )
...
le header ressemble à:
typedef signed char sint8
#if ( sizeof(sint8) != 8 )
#error "Wrong size: sint8 - shoulb be 8"
#endif // ( sizeof(sint8) != 8 )
...
A la reflexion, ca ne me surprend pas... le principal interet de stdint.h,
c'est la portabilite. Et on sait bien que windows n'en a rien a battre
de la portabilite....
C'est surtout que windows a sont propre système de nommage avec lequel
uint8_t n'est pas vraiment compatible. En plus, il est rare sur PC
d'avoir besoin de savoir si un int fait 28,32 ou 64 bits sauf pour les
formats binaires de données.
A la reflexion, ca ne me surprend pas... le principal interet de stdint.h,
c'est la portabilite. Et on sait bien que windows n'en a rien a battre
de la portabilite....
C'est surtout que windows a sont propre système de nommage avec lequel
uint8_t n'est pas vraiment compatible. En plus, il est rare sur PC
d'avoir besoin de savoir si un int fait 28,32 ou 64 bits sauf pour les
formats binaires de données.
A la reflexion, ca ne me surprend pas... le principal interet de stdint.h,
c'est la portabilite. Et on sait bien que windows n'en a rien a battre
de la portabilite....
C'est surtout que windows a sont propre système de nommage avec lequel
uint8_t n'est pas vraiment compatible. En plus, il est rare sur PC
d'avoir besoin de savoir si un int fait 28,32 ou 64 bits sauf pour les
formats binaires de données.
In article ,
James Kanze wrote:Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Tu es un peu traditionnel et en retard. Ca m'etonnerait beaucoup
que les versions *recentes* des environnements de travail Windows
et Solaris n'aient pas stdint.h.
Les choses evoluent vite. Il y a trois ans, c'etait courant de ne
pas avoir stdint.h. Aujourd'hui, ca denote de serieuses lacunes
de mise-a-jour...
In article <1181720884.655308.143...@o11g2000prd.googlegroups.com>,
James Kanze <james.ka...@gmail.com> wrote:
Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Tu es un peu traditionnel et en retard. Ca m'etonnerait beaucoup
que les versions *recentes* des environnements de travail Windows
et Solaris n'aient pas stdint.h.
Les choses evoluent vite. Il y a trois ans, c'etait courant de ne
pas avoir stdint.h. Aujourd'hui, ca denote de serieuses lacunes
de mise-a-jour...
In article ,
James Kanze wrote:Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Tu es un peu traditionnel et en retard. Ca m'etonnerait beaucoup
que les versions *recentes* des environnements de travail Windows
et Solaris n'aient pas stdint.h.
Les choses evoluent vite. Il y a trois ans, c'etait courant de ne
pas avoir stdint.h. Aujourd'hui, ca denote de serieuses lacunes
de mise-a-jour...
"Patrick 'Zener' Brunet"
a écrit dans le
messagenews:
*********_i?a63jfAD$J'ai des classes qui se veulent "system independent",
et que je dois rendre très compactes.
Dans quel but ? Si tu as d'énormes tableaux des telles classes,
tu pourrais considérer des bit-fields ; ils ont été conçus
précisement pour ça.
Par "system independent", j'entends qu'elles sont compilables
(je n'attends évidemment aucune compatibilité binaire) sans
modification sur tout couple système + compilo "raisonnable",
« Raisonable » dépend du contexte où on se place, je crois.
Disons plutôt que tu n'as pas besoin d'une portabilité vers une
architecture « exotique » (parce que ce sont les différences
dans l'architecture qui conditionnent souvent les variations
dans les compilateurs).
c'est à dire:
- autorisant des entiers signés ou pas de 8, 16 et 32 bits
(à un nommage près),
- possédant des caractères de 8 bits et le code ASCII,
- et des pointeurs, sans besoin de compatibilité avec les
entiers, mais admettant 0 comme valeur invalide,
- et connaissant le typedef et les modifiers const, mutable
et volatile.
Ce sont des choses plus ou moins universel. Pour les deux
premiers, évidemment, le compilateur va s'aligner sur
l'architecture et le système ; on ne peut pas s'attendre à des
entiers à 32 bits si le hardware est à 36 bits, et les gros IBM
utilisent toujours de l'EBCDIC en natif (mais au moins à une
époque, le run-time du compilateur traduisait en ASCII pour
les fichiers texte, de façon à ce qu'interne, un programme en
C travaillait en ASCII).
La seule exception à ma connaissance est « volatile » ; ce
mot-clé n'a pas vraiment une sémantique normalisée, et sur les
compilateurs que je connais (Sun CC, g++ et VC++), ne fait
rien d'utile ou d'intéressant ; on pourrait prèsque le considérer
comme un no-op.
Ces classes ne font aucune autre supposition sur le système,
et n'utilisent directement aucune primitive qui le fasse, même
de la stdio. Toutes les primitives de ce type sont reportées
dans des modules de portage totalement substituables.
Mais bon, c'est pas le but de la discussion. Ce qui
m'intéresse, c'est la disponibilité de certains types récents
(introduits par C99, et parfois anticipés par certains
compilos).
Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Donc après les entiers bien calibrés, je me penche sur les
formes compactes du type enum, et aussi sur le booleen
monobyte.
Donc short enum, char enum et bool.
Sachant que théoriquement lorsqu'il est supporté, bool est
supposé tenir sur un octet.
Je ne sais pas d'où tu as ça. La norme ne dit rien sur la taille
d'un bool. Sur une architecture où les accès à un octet sont
aussi vite que ceux à un mot, je m'attendrais bien que la taille
de bool soit 1. Mais sur des architectures où un accès mot est
plus rapide qu'un accès octet, il y a un choix entre vitesse et
espace à faire, et ça ne m'étonnerait pas que beaucoup de
compilateurs choisissent la vitesse.
Et que par ailleurs pour enum, si le type par défaut est bien
supposé être compatible en taille avec un int, il admet des
modifieurs qui sont normalement char, short, long et long
long.
Comment ça ? La norme ne dit rien en ce qui concerne la taille
d'un enum, sauf qu'il soit assez grand pour contenir toutes les
valeurs, et qu'il ne soit pas plus grand qu'un int, sauf s'il le
faut.
"Patrick 'Zener' Brunet"
<use.link.in.signat...@ddress.invalid> a écrit dans le
messagenews:
*********_i?a63jfAD$z__@shakotay.alphanet.ch...
J'ai des classes qui se veulent "system independent",
et que je dois rendre très compactes.
Dans quel but ? Si tu as d'énormes tableaux des telles classes,
tu pourrais considérer des bit-fields ; ils ont été conçus
précisement pour ça.
Par "system independent", j'entends qu'elles sont compilables
(je n'attends évidemment aucune compatibilité binaire) sans
modification sur tout couple système + compilo "raisonnable",
« Raisonable » dépend du contexte où on se place, je crois.
Disons plutôt que tu n'as pas besoin d'une portabilité vers une
architecture « exotique » (parce que ce sont les différences
dans l'architecture qui conditionnent souvent les variations
dans les compilateurs).
c'est à dire:
- autorisant des entiers signés ou pas de 8, 16 et 32 bits
(à un nommage près),
- possédant des caractères de 8 bits et le code ASCII,
- et des pointeurs, sans besoin de compatibilité avec les
entiers, mais admettant 0 comme valeur invalide,
- et connaissant le typedef et les modifiers const, mutable
et volatile.
Ce sont des choses plus ou moins universel. Pour les deux
premiers, évidemment, le compilateur va s'aligner sur
l'architecture et le système ; on ne peut pas s'attendre à des
entiers à 32 bits si le hardware est à 36 bits, et les gros IBM
utilisent toujours de l'EBCDIC en natif (mais au moins à une
époque, le run-time du compilateur traduisait en ASCII pour
les fichiers texte, de façon à ce qu'interne, un programme en
C travaillait en ASCII).
La seule exception à ma connaissance est « volatile » ; ce
mot-clé n'a pas vraiment une sémantique normalisée, et sur les
compilateurs que je connais (Sun CC, g++ et VC++), ne fait
rien d'utile ou d'intéressant ; on pourrait prèsque le considérer
comme un no-op.
Ces classes ne font aucune autre supposition sur le système,
et n'utilisent directement aucune primitive qui le fasse, même
de la stdio. Toutes les primitives de ce type sont reportées
dans des modules de portage totalement substituables.
Mais bon, c'est pas le but de la discussion. Ce qui
m'intéresse, c'est la disponibilité de certains types récents
(introduits par C99, et parfois anticipés par certains
compilos).
Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Donc après les entiers bien calibrés, je me penche sur les
formes compactes du type enum, et aussi sur le booleen
monobyte.
Donc short enum, char enum et bool.
Sachant que théoriquement lorsqu'il est supporté, bool est
supposé tenir sur un octet.
Je ne sais pas d'où tu as ça. La norme ne dit rien sur la taille
d'un bool. Sur une architecture où les accès à un octet sont
aussi vite que ceux à un mot, je m'attendrais bien que la taille
de bool soit 1. Mais sur des architectures où un accès mot est
plus rapide qu'un accès octet, il y a un choix entre vitesse et
espace à faire, et ça ne m'étonnerait pas que beaucoup de
compilateurs choisissent la vitesse.
Et que par ailleurs pour enum, si le type par défaut est bien
supposé être compatible en taille avec un int, il admet des
modifieurs qui sont normalement char, short, long et long
long.
Comment ça ? La norme ne dit rien en ce qui concerne la taille
d'un enum, sauf qu'il soit assez grand pour contenir toutes les
valeurs, et qu'il ne soit pas plus grand qu'un int, sauf s'il le
faut.
"Patrick 'Zener' Brunet"
a écrit dans le
messagenews:
*********_i?a63jfAD$J'ai des classes qui se veulent "system independent",
et que je dois rendre très compactes.
Dans quel but ? Si tu as d'énormes tableaux des telles classes,
tu pourrais considérer des bit-fields ; ils ont été conçus
précisement pour ça.
Par "system independent", j'entends qu'elles sont compilables
(je n'attends évidemment aucune compatibilité binaire) sans
modification sur tout couple système + compilo "raisonnable",
« Raisonable » dépend du contexte où on se place, je crois.
Disons plutôt que tu n'as pas besoin d'une portabilité vers une
architecture « exotique » (parce que ce sont les différences
dans l'architecture qui conditionnent souvent les variations
dans les compilateurs).
c'est à dire:
- autorisant des entiers signés ou pas de 8, 16 et 32 bits
(à un nommage près),
- possédant des caractères de 8 bits et le code ASCII,
- et des pointeurs, sans besoin de compatibilité avec les
entiers, mais admettant 0 comme valeur invalide,
- et connaissant le typedef et les modifiers const, mutable
et volatile.
Ce sont des choses plus ou moins universel. Pour les deux
premiers, évidemment, le compilateur va s'aligner sur
l'architecture et le système ; on ne peut pas s'attendre à des
entiers à 32 bits si le hardware est à 36 bits, et les gros IBM
utilisent toujours de l'EBCDIC en natif (mais au moins à une
époque, le run-time du compilateur traduisait en ASCII pour
les fichiers texte, de façon à ce qu'interne, un programme en
C travaillait en ASCII).
La seule exception à ma connaissance est « volatile » ; ce
mot-clé n'a pas vraiment une sémantique normalisée, et sur les
compilateurs que je connais (Sun CC, g++ et VC++), ne fait
rien d'utile ou d'intéressant ; on pourrait prèsque le considérer
comme un no-op.
Ces classes ne font aucune autre supposition sur le système,
et n'utilisent directement aucune primitive qui le fasse, même
de la stdio. Toutes les primitives de ce type sont reportées
dans des modules de portage totalement substituables.
Mais bon, c'est pas le but de la discussion. Ce qui
m'intéresse, c'est la disponibilité de certains types récents
(introduits par C99, et parfois anticipés par certains
compilos).
Le fichier <stdint.h> ne me semble pas si répandu que ça ; je
l'ai sous Linux, mais pas sous Solaris ni sous Windows.
Donc après les entiers bien calibrés, je me penche sur les
formes compactes du type enum, et aussi sur le booleen
monobyte.
Donc short enum, char enum et bool.
Sachant que théoriquement lorsqu'il est supporté, bool est
supposé tenir sur un octet.
Je ne sais pas d'où tu as ça. La norme ne dit rien sur la taille
d'un bool. Sur une architecture où les accès à un octet sont
aussi vite que ceux à un mot, je m'attendrais bien que la taille
de bool soit 1. Mais sur des architectures où un accès mot est
plus rapide qu'un accès octet, il y a un choix entre vitesse et
espace à faire, et ça ne m'étonnerait pas que beaucoup de
compilateurs choisissent la vitesse.
Et que par ailleurs pour enum, si le type par défaut est bien
supposé être compatible en taille avec un int, il admet des
modifieurs qui sont normalement char, short, long et long
long.
Comment ça ? La norme ne dit rien en ce qui concerne la taille
d'un enum, sauf qu'il soit assez grand pour contenir toutes les
valeurs, et qu'il ne soit pas plus grand qu'un int, sauf s'il le
faut.
Tout quoté à la main, ce *$#&! de OE ne reconnaît pas ton encodage :-@
"James Kanze" a écrit dans le message news:
On Jun 12, 7:48 pm, "Patrick 'Zener' Brunet"
wrote:"Patrick 'Zener' Brunet"
a écrit dans le
messagenews:
*********_i?a63jfAD$J'ai des classes qui se veulent "system independent",
et que je dois rendre très compactes.
Dans quel but ? Si tu as d'énormes tableaux des telles classes,
tu pourrais considérer des bit-fields ; ils ont été conçus
précisement pour ça.
J'avais pensé à utiliser des bitfields de 8bits comme "fagots de 8
booléens".
Le problème c'est qu'il faut faire du typedef spécifique dans
chaque cas d'utilisation, il n'est pas possible de créer un
tel type "fagot" réutilisable, du moins qui ne soit pas très
casse-gueule à l'utilisation.
Simplement parce qu'on ne peut
nommer ainsi que le fagot, pas chacun des "booléens":
typedef struct
{
int b1 : 1;
...
int b8 : 1;
} OctoBool;
Et ensuite pour l'utiliser:
OctoBool myOB;
myOB.b1 = true;
myOB.b2 = false;
...
myOB.b6 = (x <= 0);
...
if( myOB.b6)
{}
...
A moins bien sur de faire aussi côté utilisation:
...
#define bIsNegative myOB.b6
...
Beuââârk, pas vrai ?
J'essaie de faire dans l'optimisé mais aussi très lisible.Par "system independent", j'entends qu'elles sont compilables
(je n'attends évidemment aucune compatibilité binaire) sans
modification sur tout couple système + compilo "raisonnable",
« Raisonable » dépend du contexte où on se place, je crois.
Disons plutôt que tu n'as pas besoin d'une portabilité vers une
architecture « exotique » (parce que ce sont les différences
dans l'architecture qui conditionnent souvent les variations
dans les compilateurs).
Tout à fait. Je vise des domaines d'application que j'ai déjà bien vécus, et
qui couvrent le process industriel (PC et racks), la documentique, les
outils de développement orientés R&D (donc en général PC et autre s micros),
etc.
Cela dit, en ce moment côté job je fais de l'IBM TPF, et même là ce serait
globalement appliquable :o)
c'est à dire:
- autorisant des entiers signés ou pas de 8, 16 et 32 bits
(à un nommage près),
- possédant des caractères de 8 bits et le code ASCII,
- et des pointeurs, sans besoin de compatibilité avec les
entiers, mais admettant 0 comme valeur invalide,
- et connaissant le typedef et les modifiers const, mutable
et volatile.
Ce sont des choses plus ou moins universel. Pour les deux
premiers, évidemment, le compilateur va s'aligner sur
l'architecture et le système ; on ne peut pas s'attendre à des
entiers à 32 bits si le hardware est à 36 bits, et les gros IBM
utilisent toujours de l'EBCDIC en natif (mais au moins à une
époque, le run-time du compilateur traduisait en ASCII pour
les fichiers texte, de façon à ce qu'interne, un programme en
C travaillait en ASCII).
La seule exception à ma connaissance est « volatile » ; ce
mot-clé n'a pas vraiment une sémantique normalisée, et sur les
compilateurs que je connais (Sun CC, g++ et VC++), ne fait
rien d'utile ou d'intéressant ; on pourrait prèsque le considérer
comme un no-op.
En fait, depuis plus de 10 ans, je m'appuie sur une typologie perso qui se
définit ad-hoc sur le couple système-compilo, moyennant la rédactio n d'une
sorte de header "formulaire". Ca me met à l'abri des histoires de __int 8 ou
int8_t et autres headers standards qui ne le sont pas vraiment.
Pour volatile par exemple, si nécessaire je peux le fournir comme une m acro
no-op à ce niveau.
Tout mon code est bâti là-dessus, il est capable de gérer certains manques,
et par ailleurs très modulaire. La seule contrainte est que ce qui n'est
techniquement pas possible sur un système n'a aucune raison d'y être
compilé.
Alors bien sûr un système qui ne fournit pas d'entiers 32 bits semble
sémantiquement assez insuffisant selon cette approche.
Et que par ailleurs pour enum, si le type par défaut est bien
supposé être compatible en taille avec un int, il admet des
modifieurs qui sont normalement char, short, long et long
long.
Comment ça ? La norme ne dit rien en ce qui concerne la taille
d'un enum, sauf qu'il soit assez grand pour contenir toutes les
valeurs, et qu'il ne soit pas plus grand qu'un int, sauf s'il le
faut.
Oui, je crois que j'ai fait une méprise entre C99 et C++ à ce niveau.
En cherchant sur Google, j'ai trouvé beaucoup de sites qui
parlent des formes modifiées d'enum, et c'est pour ça qu'au
début je demandais des liens vers une référence pour tenter de
faire le point.
Entre temps, j'ai vérifié que mon compilo VC6, s'il connaît
bool, ne connaît pas short enum.
Tout quoté à la main, ce *$#&! de OE ne reconnaît pas ton encodage :-@
"James Kanze" <james.ka...@gmail.com> a écrit dans le message news:
1181720884.655308.143...@o11g2000prd.googlegroups.com...
On Jun 12, 7:48 pm, "Patrick 'Zener' Brunet"
<use.link.in.signat...@ddress.invalid> wrote:
"Patrick 'Zener' Brunet"
<use.link.in.signat...@ddress.invalid> a écrit dans le
messagenews:
*********_i?a63jfAD$...@shakotay.alphanet.ch...
J'ai des classes qui se veulent "system independent",
et que je dois rendre très compactes.
Dans quel but ? Si tu as d'énormes tableaux des telles classes,
tu pourrais considérer des bit-fields ; ils ont été conçus
précisement pour ça.
J'avais pensé à utiliser des bitfields de 8bits comme "fagots de 8
booléens".
Le problème c'est qu'il faut faire du typedef spécifique dans
chaque cas d'utilisation, il n'est pas possible de créer un
tel type "fagot" réutilisable, du moins qui ne soit pas très
casse-gueule à l'utilisation.
Simplement parce qu'on ne peut
nommer ainsi que le fagot, pas chacun des "booléens":
typedef struct
{
int b1 : 1;
...
int b8 : 1;
} OctoBool;
Et ensuite pour l'utiliser:
OctoBool myOB;
myOB.b1 = true;
myOB.b2 = false;
...
myOB.b6 = (x <= 0);
...
if( myOB.b6)
{}
...
A moins bien sur de faire aussi côté utilisation:
...
#define bIsNegative myOB.b6
...
Beuââârk, pas vrai ?
J'essaie de faire dans l'optimisé mais aussi très lisible.
Par "system independent", j'entends qu'elles sont compilables
(je n'attends évidemment aucune compatibilité binaire) sans
modification sur tout couple système + compilo "raisonnable",
« Raisonable » dépend du contexte où on se place, je crois.
Disons plutôt que tu n'as pas besoin d'une portabilité vers une
architecture « exotique » (parce que ce sont les différences
dans l'architecture qui conditionnent souvent les variations
dans les compilateurs).
Tout à fait. Je vise des domaines d'application que j'ai déjà bien vécus, et
qui couvrent le process industriel (PC et racks), la documentique, les
outils de développement orientés R&D (donc en général PC et autre s micros),
etc.
Cela dit, en ce moment côté job je fais de l'IBM TPF, et même là ce serait
globalement appliquable :o)
c'est à dire:
- autorisant des entiers signés ou pas de 8, 16 et 32 bits
(à un nommage près),
- possédant des caractères de 8 bits et le code ASCII,
- et des pointeurs, sans besoin de compatibilité avec les
entiers, mais admettant 0 comme valeur invalide,
- et connaissant le typedef et les modifiers const, mutable
et volatile.
Ce sont des choses plus ou moins universel. Pour les deux
premiers, évidemment, le compilateur va s'aligner sur
l'architecture et le système ; on ne peut pas s'attendre à des
entiers à 32 bits si le hardware est à 36 bits, et les gros IBM
utilisent toujours de l'EBCDIC en natif (mais au moins à une
époque, le run-time du compilateur traduisait en ASCII pour
les fichiers texte, de façon à ce qu'interne, un programme en
C travaillait en ASCII).
La seule exception à ma connaissance est « volatile » ; ce
mot-clé n'a pas vraiment une sémantique normalisée, et sur les
compilateurs que je connais (Sun CC, g++ et VC++), ne fait
rien d'utile ou d'intéressant ; on pourrait prèsque le considérer
comme un no-op.
En fait, depuis plus de 10 ans, je m'appuie sur une typologie perso qui se
définit ad-hoc sur le couple système-compilo, moyennant la rédactio n d'une
sorte de header "formulaire". Ca me met à l'abri des histoires de __int 8 ou
int8_t et autres headers standards qui ne le sont pas vraiment.
Pour volatile par exemple, si nécessaire je peux le fournir comme une m acro
no-op à ce niveau.
Tout mon code est bâti là-dessus, il est capable de gérer certains manques,
et par ailleurs très modulaire. La seule contrainte est que ce qui n'est
techniquement pas possible sur un système n'a aucune raison d'y être
compilé.
Alors bien sûr un système qui ne fournit pas d'entiers 32 bits semble
sémantiquement assez insuffisant selon cette approche.
Et que par ailleurs pour enum, si le type par défaut est bien
supposé être compatible en taille avec un int, il admet des
modifieurs qui sont normalement char, short, long et long
long.
Comment ça ? La norme ne dit rien en ce qui concerne la taille
d'un enum, sauf qu'il soit assez grand pour contenir toutes les
valeurs, et qu'il ne soit pas plus grand qu'un int, sauf s'il le
faut.
Oui, je crois que j'ai fait une méprise entre C99 et C++ à ce niveau.
En cherchant sur Google, j'ai trouvé beaucoup de sites qui
parlent des formes modifiées d'enum, et c'est pour ça qu'au
début je demandais des liens vers une référence pour tenter de
faire le point.
Entre temps, j'ai vérifié que mon compilo VC6, s'il connaît
bool, ne connaît pas short enum.
Tout quoté à la main, ce *$#&! de OE ne reconnaît pas ton encodage :-@
"James Kanze" a écrit dans le message news:
On Jun 12, 7:48 pm, "Patrick 'Zener' Brunet"
wrote:"Patrick 'Zener' Brunet"
a écrit dans le
messagenews:
*********_i?a63jfAD$J'ai des classes qui se veulent "system independent",
et que je dois rendre très compactes.
Dans quel but ? Si tu as d'énormes tableaux des telles classes,
tu pourrais considérer des bit-fields ; ils ont été conçus
précisement pour ça.
J'avais pensé à utiliser des bitfields de 8bits comme "fagots de 8
booléens".
Le problème c'est qu'il faut faire du typedef spécifique dans
chaque cas d'utilisation, il n'est pas possible de créer un
tel type "fagot" réutilisable, du moins qui ne soit pas très
casse-gueule à l'utilisation.
Simplement parce qu'on ne peut
nommer ainsi que le fagot, pas chacun des "booléens":
typedef struct
{
int b1 : 1;
...
int b8 : 1;
} OctoBool;
Et ensuite pour l'utiliser:
OctoBool myOB;
myOB.b1 = true;
myOB.b2 = false;
...
myOB.b6 = (x <= 0);
...
if( myOB.b6)
{}
...
A moins bien sur de faire aussi côté utilisation:
...
#define bIsNegative myOB.b6
...
Beuââârk, pas vrai ?
J'essaie de faire dans l'optimisé mais aussi très lisible.Par "system independent", j'entends qu'elles sont compilables
(je n'attends évidemment aucune compatibilité binaire) sans
modification sur tout couple système + compilo "raisonnable",
« Raisonable » dépend du contexte où on se place, je crois.
Disons plutôt que tu n'as pas besoin d'une portabilité vers une
architecture « exotique » (parce que ce sont les différences
dans l'architecture qui conditionnent souvent les variations
dans les compilateurs).
Tout à fait. Je vise des domaines d'application que j'ai déjà bien vécus, et
qui couvrent le process industriel (PC et racks), la documentique, les
outils de développement orientés R&D (donc en général PC et autre s micros),
etc.
Cela dit, en ce moment côté job je fais de l'IBM TPF, et même là ce serait
globalement appliquable :o)
c'est à dire:
- autorisant des entiers signés ou pas de 8, 16 et 32 bits
(à un nommage près),
- possédant des caractères de 8 bits et le code ASCII,
- et des pointeurs, sans besoin de compatibilité avec les
entiers, mais admettant 0 comme valeur invalide,
- et connaissant le typedef et les modifiers const, mutable
et volatile.
Ce sont des choses plus ou moins universel. Pour les deux
premiers, évidemment, le compilateur va s'aligner sur
l'architecture et le système ; on ne peut pas s'attendre à des
entiers à 32 bits si le hardware est à 36 bits, et les gros IBM
utilisent toujours de l'EBCDIC en natif (mais au moins à une
époque, le run-time du compilateur traduisait en ASCII pour
les fichiers texte, de façon à ce qu'interne, un programme en
C travaillait en ASCII).
La seule exception à ma connaissance est « volatile » ; ce
mot-clé n'a pas vraiment une sémantique normalisée, et sur les
compilateurs que je connais (Sun CC, g++ et VC++), ne fait
rien d'utile ou d'intéressant ; on pourrait prèsque le considérer
comme un no-op.
En fait, depuis plus de 10 ans, je m'appuie sur une typologie perso qui se
définit ad-hoc sur le couple système-compilo, moyennant la rédactio n d'une
sorte de header "formulaire". Ca me met à l'abri des histoires de __int 8 ou
int8_t et autres headers standards qui ne le sont pas vraiment.
Pour volatile par exemple, si nécessaire je peux le fournir comme une m acro
no-op à ce niveau.
Tout mon code est bâti là-dessus, il est capable de gérer certains manques,
et par ailleurs très modulaire. La seule contrainte est que ce qui n'est
techniquement pas possible sur un système n'a aucune raison d'y être
compilé.
Alors bien sûr un système qui ne fournit pas d'entiers 32 bits semble
sémantiquement assez insuffisant selon cette approche.
Et que par ailleurs pour enum, si le type par défaut est bien
supposé être compatible en taille avec un int, il admet des
modifieurs qui sont normalement char, short, long et long
long.
Comment ça ? La norme ne dit rien en ce qui concerne la taille
d'un enum, sauf qu'il soit assez grand pour contenir toutes les
valeurs, et qu'il ne soit pas plus grand qu'un int, sauf s'il le
faut.
Oui, je crois que j'ai fait une méprise entre C99 et C++ à ce niveau.
En cherchant sur Google, j'ai trouvé beaucoup de sites qui
parlent des formes modifiées d'enum, et c'est pour ça qu'au
début je demandais des liens vers une référence pour tenter de
faire le point.
Entre temps, j'ai vérifié que mon compilo VC6, s'il connaît
bool, ne connaît pas short enum.
Bonsoir.
Tout quoté à la main, ce *$#&! de OE ne reconnaît pas ton encodage :-@
"James Kanze" a écrit dans le message news:
On Jun 12, 7:48 pm, "Patrick 'Zener' Brunet"
wrote:"Patrick 'Zener' Brunet"
a écrit dans le
messagenews:
*********_i?a63jfAD$J'ai des classes qui se veulent "system independent",
et que je dois rendre très compactes.
Dans quel but ? Si tu as d'énormes tableaux des telles classes,
tu pourrais considérer des bit-fields ; ils ont été conçus
précisement pour ça.
J'avais pensé à utiliser des bitfields de 8bits comme "fagots de 8
booléens". Le problème c'est qu'il faut faire du typedef spécifique dans
chaque cas d'utilisation, il n'est pas possible de créer un tel type "fagot"
réutilisable, du moins qui ne soit pas très casse-gueule à l'utilisation.
Simplement parce qu'on ne peut nommer ainsi que le fagot, pas chacun des
"booléens":
typedef struct
{
int b1 : 1;
...
int b8 : 1;
} OctoBool;
Et ensuite pour l'utiliser:
OctoBool myOB;
myOB.b1 = true;
myOB.b2 = false;
...
myOB.b6 = (x <= 0);
...
if( myOB.b6)
{
}
...
A moins bien sur de faire aussi côté utilisation:
...
#define bIsNegative myOB.b6
...
Beuââârk, pas vrai ?
J'essaie de faire dans l'optimisé mais aussi très lisible.
Bonsoir.
Tout quoté à la main, ce *$#&! de OE ne reconnaît pas ton encodage :-@
"James Kanze" <james.kanze@gmail.com> a écrit dans le message news:
1181720884.655308.143240@o11g2000prd.googlegroups.com...
On Jun 12, 7:48 pm, "Patrick 'Zener' Brunet"
<use.link.in.signat...@ddress.invalid> wrote:
"Patrick 'Zener' Brunet"
<use.link.in.signat...@ddress.invalid> a écrit dans le
messagenews:
*********_i?a63jfAD$z__@shakotay.alphanet.ch...
J'ai des classes qui se veulent "system independent",
et que je dois rendre très compactes.
Dans quel but ? Si tu as d'énormes tableaux des telles classes,
tu pourrais considérer des bit-fields ; ils ont été conçus
précisement pour ça.
J'avais pensé à utiliser des bitfields de 8bits comme "fagots de 8
booléens". Le problème c'est qu'il faut faire du typedef spécifique dans
chaque cas d'utilisation, il n'est pas possible de créer un tel type "fagot"
réutilisable, du moins qui ne soit pas très casse-gueule à l'utilisation.
Simplement parce qu'on ne peut nommer ainsi que le fagot, pas chacun des
"booléens":
typedef struct
{
int b1 : 1;
...
int b8 : 1;
} OctoBool;
Et ensuite pour l'utiliser:
OctoBool myOB;
myOB.b1 = true;
myOB.b2 = false;
...
myOB.b6 = (x <= 0);
...
if( myOB.b6)
{
}
...
A moins bien sur de faire aussi côté utilisation:
...
#define bIsNegative myOB.b6
...
Beuââârk, pas vrai ?
J'essaie de faire dans l'optimisé mais aussi très lisible.
Bonsoir.
Tout quoté à la main, ce *$#&! de OE ne reconnaît pas ton encodage :-@
"James Kanze" a écrit dans le message news:
On Jun 12, 7:48 pm, "Patrick 'Zener' Brunet"
wrote:"Patrick 'Zener' Brunet"
a écrit dans le
messagenews:
*********_i?a63jfAD$J'ai des classes qui se veulent "system independent",
et que je dois rendre très compactes.
Dans quel but ? Si tu as d'énormes tableaux des telles classes,
tu pourrais considérer des bit-fields ; ils ont été conçus
précisement pour ça.
J'avais pensé à utiliser des bitfields de 8bits comme "fagots de 8
booléens". Le problème c'est qu'il faut faire du typedef spécifique dans
chaque cas d'utilisation, il n'est pas possible de créer un tel type "fagot"
réutilisable, du moins qui ne soit pas très casse-gueule à l'utilisation.
Simplement parce qu'on ne peut nommer ainsi que le fagot, pas chacun des
"booléens":
typedef struct
{
int b1 : 1;
...
int b8 : 1;
} OctoBool;
Et ensuite pour l'utiliser:
OctoBool myOB;
myOB.b1 = true;
myOB.b2 = false;
...
myOB.b6 = (x <= 0);
...
if( myOB.b6)
{
}
...
A moins bien sur de faire aussi côté utilisation:
...
#define bIsNegative myOB.b6
...
Beuââârk, pas vrai ?
J'essaie de faire dans l'optimisé mais aussi très lisible.
Tout quoté à la main, ce *$#&! de OE ne reconnaît pas ton encodage :-@
Je sais. Il y a quelque chose de particulier qui s'ajoute à mes
postings quand je poste du travail. Je suis en train d'en
chercher la cause,
Tout quoté à la main, ce *$#&! de OE ne reconnaît pas ton encodage :-@
Je sais. Il y a quelque chose de particulier qui s'ajoute à mes
postings quand je poste du travail. Je suis en train d'en
chercher la cause,
Tout quoté à la main, ce *$#&! de OE ne reconnaît pas ton encodage :-@
Je sais. Il y a quelque chose de particulier qui s'ajoute à mes
postings quand je poste du travail. Je suis en train d'en
chercher la cause,