how to compile enum as signed independent of enum value range?
Michael Brand
michael.brand@nexustelecom.com
Tue Aug 14 10:43:00 GMT 2007
So far I found out how to tell gcc to change compiling the enum B from
unsigned to signed as you can see below:
$ cat enum.c
/* 1 */ #include <limits.h>
/* 2 */ enum A {AA = -1};
/* 3 */ enum B {BB = UINT_MAX};
/* 4 */ enum C {CC0 = -1, CC1 = UINT_MAX - 1};
/* 5 */ enum D {DD = 0};
/* 6 */ int main(void) {
/* 7 */ enum A a;
/* 8 */ enum B b;
/* 9 */ enum C c;
/* 10 */ enum D d;
/* 11 */ a = (a >= 0);
/* 12 */ b = (b >= 0);
/* 13 */ c = (c >= 0);
/* 14 */ d = (d >= 0);
/* 15 */ return a * 1000 + b * 100 + c * 10 + d;
/* 16 */ }
$
$ gcc --version
gcc (GCC) 3.4.6
...
$
$ gcc -Wall -Wextra enum.c
enum.c: In function `main':
enum.c:12: warning: comparison of unsigned expression >= 0 is always
true
enum.c:14: warning: comparison of unsigned expression >= 0 is always
true
$
$ gcc -Wall -Wextra -ansi enum.c
enum.c: In function `main':
enum.c:12: warning: comparison of unsigned expression >= 0 is always
true
enum.c:14: warning: comparison of unsigned expression >= 0 is always
true
$
$ gcc -Wall -Wextra -ansi -pedantic enum.c
enum.c:3: warning: ISO C restricts enumerator values to range of `int'
enum.c:4: warning: ISO C restricts enumerator values to range of `int'
enum.c: In function `main':
enum.c:14: warning: comparison of unsigned expression >= 0 is always
true
$
$ gcc -Wall -Wextra -pedantic enum.c
enum.c:3: warning: ISO C restricts enumerator values to range of `int'
enum.c:4: warning: ISO C restricts enumerator values to range of `int'
enum.c: In function `main':
enum.c:14: warning: comparison of unsigned expression >= 0 is always
true
$
It is not my intention to change the behaviour of these options.
My questions:
How to tell gcc to compile enum D as signed too but without changing the
source code? I don't want to have a negative enum value in enum D like
AA in enum A or to add a signed cast to the evaluation of d.
I expected that it would be possible to do this for enums with a gcc
option -fsigned-enum like it is possible to do this for bitfieds or char
with -fsigned-bitfield or -fsigned-char. Shouldn't -fsigned-enum and
-funsigned-enum be added to gcc to facilitate porting of code to compile
the same way with gcc too?
More information about the Gcc-help
mailing list