Les enumeration-constants ont la meme taille que les variables du meme
type alors qu'ils devraient avoir sizeof(int) (4 sur mon archi). Dans le
cas des long long, cela ne me semble pas correct, on devrait avoir soit
8 [4] (sous-optimal) soit 4 [4]. Explication?
$ gcc -W -Wall -pedantic -stdÉ9 fclc.c fclc.c:7: warning: ISO C restricts enumerator values to range of `int' fclc.c:8: warning: ISO C restricts enumerator values to range of `int' fclc.c:9: warning: ISO C restricts enumerator values to range of `int'
Les enumeration-constants ont la meme taille que les variables du meme type
C'est une extension assez répandue de permettre des constantes de plus grande amplitude. Évidemment, cela oblige le type enum à se promouvoir en autre chose qu'un entier, et les constantes à être de type plus large.
Antoine
En ck345j$3r1$1@sunnews.cern.ch, Laurent Deniau va escriure:
Or le programme ci-dessous affiche:
$ gcc -W -Wall -pedantic -stdÉ9 fclc.c
fclc.c:7: warning: ISO C restricts enumerator values to range of `int'
fclc.c:8: warning: ISO C restricts enumerator values to range of `int'
fclc.c:9: warning: ISO C restricts enumerator values to range of `int'
Les enumeration-constants ont la meme taille que les variables du meme
type
C'est une extension assez répandue de permettre des constantes de plus
grande amplitude. Évidemment, cela oblige le type enum à se promouvoir en
autre chose qu'un entier, et les constantes à être de type plus large.
$ gcc -W -Wall -pedantic -stdÉ9 fclc.c fclc.c:7: warning: ISO C restricts enumerator values to range of `int' fclc.c:8: warning: ISO C restricts enumerator values to range of `int' fclc.c:9: warning: ISO C restricts enumerator values to range of `int'
Les enumeration-constants ont la meme taille que les variables du meme type
C'est une extension assez répandue de permettre des constantes de plus grande amplitude. Évidemment, cela oblige le type enum à se promouvoir en autre chose qu'un entier, et les constantes à être de type plus large.
Antoine
Laurent Deniau
Antoine Leca wrote:
En ck345j$3r1$, Laurent Deniau va escriure:
Or le programme ci-dessous affiche:
$ gcc -W -Wall -pedantic -stdÉ9 fclc.c fclc.c:7: warning: ISO C restricts enumerator values to range of `int' fclc.c:8: warning: ISO C restricts enumerator values to range of `int' fclc.c:9: warning: ISO C restricts enumerator values to range of `int'
Arf, j'avais oublie le pedantic. Des que je sors de mes makefiles je deviens un handicape. Ok tout est clair.
Les enumeration-constants ont la meme taille que les variables du meme type
C'est une extension assez répandue de permettre des constantes de plus grande amplitude. Évidemment, cela oblige le type enum à se promouvoir en autre chose qu'un entier, et les constantes à être de type plus large.
Decidement, enum est une vraie plaie pour la reflection.
a+, ld.
Antoine Leca wrote:
En ck345j$3r1$1@sunnews.cern.ch, Laurent Deniau va escriure:
Or le programme ci-dessous affiche:
$ gcc -W -Wall -pedantic -stdÉ9 fclc.c
fclc.c:7: warning: ISO C restricts enumerator values to range of `int'
fclc.c:8: warning: ISO C restricts enumerator values to range of `int'
fclc.c:9: warning: ISO C restricts enumerator values to range of `int'
Arf, j'avais oublie le pedantic. Des que je sors de mes makefiles je
deviens un handicape. Ok tout est clair.
Les enumeration-constants ont la meme taille que les variables du meme
type
C'est une extension assez répandue de permettre des constantes de plus
grande amplitude. Évidemment, cela oblige le type enum à se promouvoir en
autre chose qu'un entier, et les constantes à être de type plus large.
Decidement, enum est une vraie plaie pour la reflection.
$ gcc -W -Wall -pedantic -stdÉ9 fclc.c fclc.c:7: warning: ISO C restricts enumerator values to range of `int' fclc.c:8: warning: ISO C restricts enumerator values to range of `int' fclc.c:9: warning: ISO C restricts enumerator values to range of `int'
Arf, j'avais oublie le pedantic. Des que je sors de mes makefiles je deviens un handicape. Ok tout est clair.
Les enumeration-constants ont la meme taille que les variables du meme type
C'est une extension assez répandue de permettre des constantes de plus grande amplitude. Évidemment, cela oblige le type enum à se promouvoir en autre chose qu'un entier, et les constantes à être de type plus large.
Decidement, enum est une vraie plaie pour la reflection.
a+, ld.
Horst Kraemer
Laurent Deniau wrote:
Antoine Leca wrote:
En ck345j$3r1$, Laurent Deniau va escriure:
Or le programme ci-dessous affiche:
$ gcc -W -Wall -pedantic -stdÉ9 fclc.c fclc.c:7: warning: ISO C restricts enumerator values to range of `int' fclc.c:8: warning: ISO C restricts enumerator values to range of `int' fclc.c:9: warning: ISO C restricts enumerator values to range of `int'
Arf, j'avais oublie le pedantic. Des que je sors de mes makefiles je deviens un handicape. Ok tout est clair.
Les enumeration-constants ont la meme taille que les variables du meme type
C'est une extension assez répandue de permettre des constantes de plus grande amplitude. Évidemment, cela oblige le type enum à se promouvoir en autre chose qu'un entier, et les constantes à être de type plus large.
Decidement, enum est une vraie plaie pour la reflection.
Selon la norme les enum sont simples. Les membres d'un type enum sont des symboles pour des valeurs du type int et pour les objets (variables) de ce type le compilateur a le droit de choisir un type qui équivaut à un type entier quelconque capable de contenir toutes les valeurs des membres de ce type.
-- Horst
-- Lâche pas la patate!
Laurent Deniau <Laurent.Deniau@cern.ch> wrote:
Antoine Leca wrote:
En ck345j$3r1$1@sunnews.cern.ch, Laurent Deniau va escriure:
Or le programme ci-dessous affiche:
$ gcc -W -Wall -pedantic -stdÉ9 fclc.c
fclc.c:7: warning: ISO C restricts enumerator values to range of `int'
fclc.c:8: warning: ISO C restricts enumerator values to range of `int'
fclc.c:9: warning: ISO C restricts enumerator values to range of `int'
Arf, j'avais oublie le pedantic. Des que je sors de mes makefiles je
deviens un handicape. Ok tout est clair.
Les enumeration-constants ont la meme taille que les variables du meme
type
C'est une extension assez répandue de permettre des constantes de plus
grande amplitude. Évidemment, cela oblige le type enum à se promouvoir en
autre chose qu'un entier, et les constantes à être de type plus large.
Decidement, enum est une vraie plaie pour la reflection.
Selon la norme les enum sont simples. Les membres d'un type enum sont
des symboles pour des valeurs du type int et pour les objets
(variables) de ce type le compilateur a le droit de choisir un type
qui équivaut à un type entier quelconque capable de contenir toutes
les valeurs des membres de ce type.
$ gcc -W -Wall -pedantic -stdÉ9 fclc.c fclc.c:7: warning: ISO C restricts enumerator values to range of `int' fclc.c:8: warning: ISO C restricts enumerator values to range of `int' fclc.c:9: warning: ISO C restricts enumerator values to range of `int'
Arf, j'avais oublie le pedantic. Des que je sors de mes makefiles je deviens un handicape. Ok tout est clair.
Les enumeration-constants ont la meme taille que les variables du meme type
C'est une extension assez répandue de permettre des constantes de plus grande amplitude. Évidemment, cela oblige le type enum à se promouvoir en autre chose qu'un entier, et les constantes à être de type plus large.
Decidement, enum est une vraie plaie pour la reflection.
Selon la norme les enum sont simples. Les membres d'un type enum sont des symboles pour des valeurs du type int et pour les objets (variables) de ce type le compilateur a le droit de choisir un type qui équivaut à un type entier quelconque capable de contenir toutes les valeurs des membres de ce type.
-- Horst
-- Lâche pas la patate!
Emmanuel Delahaye
Laurent Deniau wrote on 07/10/04 :
La norme dit 6.7.2.2-2:
The expression that defines the value of an enumeration constant shall be an integer constant expression that has a value representable as an int.
enum { e3_ = LONG_MIN } e3;
Pas du C.
Comme indiqué ci-dessus, un enum doit être un int. Vérifie des paramètres, tu ne dois pas être en mode ANSI strict.
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Laurent Deniau wrote on 07/10/04 :
La norme dit 6.7.2.2-2:
The expression that defines the value of an enumeration constant shall be an
integer constant expression that has a value representable as an int.
enum { e3_ = LONG_MIN } e3;
Pas du C.
Comme indiqué ci-dessus, un enum doit être un int. Vérifie des
paramètres, tu ne dois pas être en mode ANSI strict.
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
Decidement, enum est une vraie plaie pour la reflection.
reflection de quoi dans quoi ?
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Emmanuel Delahaye
Horst Kraemer wrote on 07/10/04 :
Selon la norme les enum sont simples. Les membres d'un type enum sont des symboles pour des valeurs du type int et pour les objets (variables) de ce type le compilateur a le droit de choisir un type qui équivaut à un type entier quelconque capable de contenir toutes les valeurs des membres de ce type.
donc plus petit. Certains enums peuvent avoir une taille de char (1).
Dans mon Borland C, j'ai une option qui force les enums à int quelques soient leurs valeurs.
+-[_]------------- Code Generation -----------------+ ? ? ? Model Options ? ? ( ) Tiny [X] Treat enums as ints ? ? ( ) Small [ ] Word alignment ? ? ( ) Medium [X] Duplicate strings merged ? ? ( ) Compact [ ] Unsigned characters ? ? ( ) Large [ ] Pre-compiled headers ? ? ( ) Huge [ ] Generate assembler source ? ? [ ] Compile via assembler ? ? ? ? Assume SS Equals DS ? ? ( ) Default for memory model ? ? ( ) Never ? ? ( ) Always ? ? ? ? Defines ? ? ? ? OK _ Cancel _ Help _ ? ? ________ ________ ________ ? +---------------------------------------------------+
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Horst Kraemer wrote on 07/10/04 :
Selon la norme les enum sont simples. Les membres d'un type enum sont
des symboles pour des valeurs du type int et pour les objets
(variables) de ce type le compilateur a le droit de choisir un type
qui équivaut à un type entier quelconque capable de contenir toutes
les valeurs des membres de ce type.
donc plus petit. Certains enums peuvent avoir une taille de char (1).
Dans mon Borland C, j'ai une option qui force les enums à int quelques
soient leurs valeurs.
+-[_]------------- Code Generation -----------------+
? ?
? Model Options ?
? ( ) Tiny [X] Treat enums as ints ?
? ( ) Small [ ] Word alignment ?
? ( ) Medium [X] Duplicate strings merged ?
? ( ) Compact [ ] Unsigned characters ?
? ( ) Large [ ] Pre-compiled headers ?
? ( ) Huge [ ] Generate assembler source ?
? [ ] Compile via assembler ?
? ?
? Assume SS Equals DS ?
? ( ) Default for memory model ?
? ( ) Never ?
? ( ) Always ?
? ?
? Defines ?
? ?
? OK _ Cancel _ Help _ ?
? ________ ________ ________ ?
+---------------------------------------------------+
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
Selon la norme les enum sont simples. Les membres d'un type enum sont des symboles pour des valeurs du type int et pour les objets (variables) de ce type le compilateur a le droit de choisir un type qui équivaut à un type entier quelconque capable de contenir toutes les valeurs des membres de ce type.
donc plus petit. Certains enums peuvent avoir une taille de char (1).
Dans mon Borland C, j'ai une option qui force les enums à int quelques soient leurs valeurs.
+-[_]------------- Code Generation -----------------+ ? ? ? Model Options ? ? ( ) Tiny [X] Treat enums as ints ? ? ( ) Small [ ] Word alignment ? ? ( ) Medium [X] Duplicate strings merged ? ? ( ) Compact [ ] Unsigned characters ? ? ( ) Large [ ] Pre-compiled headers ? ? ( ) Huge [ ] Generate assembler source ? ? [ ] Compile via assembler ? ? ? ? Assume SS Equals DS ? ? ( ) Default for memory model ? ? ( ) Never ? ? ( ) Always ? ? ? ? Defines ? ? ? ? OK _ Cancel _ Help _ ? ? ________ ________ ________ ? +---------------------------------------------------+
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Laurent Deniau
Emmanuel Delahaye wrote:
Horst Kraemer wrote on 07/10/04 :
Selon la norme les enum sont simples. Les membres d'un type enum sont des symboles pour des valeurs du type int et pour les objets (variables) de ce type le compilateur a le droit de choisir un type qui équivaut à un type entier quelconque capable de contenir toutes les valeurs des membres de ce type.
donc plus petit. Certains enums peuvent avoir une taille de char (1).
exact, c'est pour ca que leur taille est imprevisible...
a+, ld.
Emmanuel Delahaye wrote:
Horst Kraemer wrote on 07/10/04 :
Selon la norme les enum sont simples. Les membres d'un type enum sont
des symboles pour des valeurs du type int et pour les objets
(variables) de ce type le compilateur a le droit de choisir un type
qui équivaut à un type entier quelconque capable de contenir toutes
les valeurs des membres de ce type.
donc plus petit. Certains enums peuvent avoir une taille de char (1).
exact, c'est pour ca que leur taille est imprevisible...
Selon la norme les enum sont simples. Les membres d'un type enum sont des symboles pour des valeurs du type int et pour les objets (variables) de ce type le compilateur a le droit de choisir un type qui équivaut à un type entier quelconque capable de contenir toutes les valeurs des membres de ce type.
donc plus petit. Certains enums peuvent avoir une taille de char (1).
exact, c'est pour ca que leur taille est imprevisible...
a+, ld.
Laurent Deniau
Emmanuel Delahaye wrote:
Laurent Deniau wrote on 07/10/04 :
Decidement, enum est une vraie plaie pour la reflection.
reflection de quoi dans quoi ?
reflection/introspection des objets. OOC supporte la reflection sans une seule ligne de code de la part du programmeur. Je pensais pouvoir determiner automatiquement le type integral equivalent a un enum, mais cela semble impossible. Je vais devoir faire autrement.
a+, ld.
Emmanuel Delahaye wrote:
Laurent Deniau wrote on 07/10/04 :
Decidement, enum est une vraie plaie pour la reflection.
reflection de quoi dans quoi ?
reflection/introspection des objets. OOC supporte la reflection sans une
seule ligne de code de la part du programmeur. Je pensais pouvoir
determiner automatiquement le type integral equivalent a un enum, mais
cela semble impossible. Je vais devoir faire autrement.
Decidement, enum est une vraie plaie pour la reflection.
reflection de quoi dans quoi ?
reflection/introspection des objets. OOC supporte la reflection sans une seule ligne de code de la part du programmeur. Je pensais pouvoir determiner automatiquement le type integral equivalent a un enum, mais cela semble impossible. Je vais devoir faire autrement.
a+, ld.
Charlie Gordon
reflection/introspection des objets. OOC supporte la reflection sans une seule ligne de code de la part du programmeur. Je pensais pouvoir determiner automatiquement le type integral equivalent a un enum, mais cela semble impossible. Je vais devoir faire autrement.
Ce serait pas plutôt reflexion en français, un peu comme :
anglais: connection français: connexion anglais: French connection français: filière américaine
Chqrlie.
reflection/introspection des objets. OOC supporte la reflection sans une
seule ligne de code de la part du programmeur. Je pensais pouvoir
determiner automatiquement le type integral equivalent a un enum, mais
cela semble impossible. Je vais devoir faire autrement.
Ce serait pas plutôt reflexion en français, un peu comme :
anglais: connection
français: connexion
anglais: French connection
français: filière américaine
reflection/introspection des objets. OOC supporte la reflection sans une seule ligne de code de la part du programmeur. Je pensais pouvoir determiner automatiquement le type integral equivalent a un enum, mais cela semble impossible. Je vais devoir faire autrement.
Ce serait pas plutôt reflexion en français, un peu comme :
anglais: connection français: connexion anglais: French connection français: filière américaine
Chqrlie.
Laurent Deniau
Charlie Gordon wrote:
reflection/introspection des objets. OOC supporte la reflection sans une seule ligne de code de la part du programmeur. Je pensais pouvoir determiner automatiquement le type integral equivalent a un enum, mais cela semble impossible. Je vais devoir faire autrement.
Ce serait pas plutôt reflexion en français, un peu comme :
A la reflexion, surement ;-)
a+, ld.
Charlie Gordon wrote:
reflection/introspection des objets. OOC supporte la reflection sans une
seule ligne de code de la part du programmeur. Je pensais pouvoir
determiner automatiquement le type integral equivalent a un enum, mais
cela semble impossible. Je vais devoir faire autrement.
Ce serait pas plutôt reflexion en français, un peu comme :
reflection/introspection des objets. OOC supporte la reflection sans une seule ligne de code de la part du programmeur. Je pensais pouvoir determiner automatiquement le type integral equivalent a un enum, mais cela semble impossible. Je vais devoir faire autrement.
Ce serait pas plutôt reflexion en français, un peu comme :