OVH Cloud OVH Cloud

enum et gcc?

12 réponses
Avatar
Laurent Deniau
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.

Or le programme ci-dessous affiche:

sizeof(e1) = 4 [4]
sizeof(e2) = 4 [4]
sizeof(e3) = 4 [4]
sizeof(e4) = 4 [4]
sizeof(e5) = 8 [8]
sizeof(e6) = 8 [8]

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?

a+, ld.

#include <stdio.h>
#include <limits.h>

enum { e1_ } e1;
enum { e2_ = -1 } e2;
enum { e3_ = LONG_MIN } e3;
enum { e4_ = ULONG_MAX } e4;
enum { e5_ = LLONG_MIN } e5;
enum { e6_ = ULLONG_MAX } e6;

#define PRINT(a) \
printf("sizeof(" #a ") = %zu [%zu]\n", sizeof(a), sizeof(a##_))

int
main(void)
{
PRINT(e1);
PRINT(e2);
PRINT(e3);
PRINT(e4);
PRINT(e5);
PRINT(e6);

return 0;
}

2 réponses

1 2
Avatar
Antoine Leca
En , Emmanuel Delahaye va escriure:
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.


?

Et si LONG_MIN est représentable comme int ?

J'ai pas dit que c'était strictement conforme (cela ne l'est pas), mais sur
cette ligne-là je ne vois pas de problème.

De plus, il y a tellement de compilos C qui se dépatouillent avec cela que
c'est une extension plausible du langage, en tous cas compréhensible.


Antoine


Avatar
Emmanuel Delahaye
Antoine Leca wrote on 08/10/04 :
En , Emmanuel Delahaye va escriure:
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.


?

Et si LONG_MIN est représentable comme int ?


Ok. Pas portable alors. Pour moi, c'est pareil... Les autres font ce
qu'ils veulent...

--
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"



1 2