#include <stdio.h>enum fred{ a, b, c, d, e = 54, f = 73, g, h};/* All following uses of enum efoo should compile without warning. While forward enums aren't ISO C, it's accepted by GCC also in strict mode, and only warned about with -pedantic. This happens in the real world. *//* Strict ISO C doesn't allow this kind of forward declaration of enums, but GCC accepts it (and gives only pedantic warning), and it occurs in the wild. */enum efoo;struct Sforward_use { int (*fmember) (enum efoo x);};extern enum efoo it_real_fn(void);enum efoo { ONE, TWO,};struct S2 { enum efoo (*f2) (void);};void should_compile(struct S2 *s){ s->f2 = it_real_fn;}enum efoo it_real_fn(void){ return TWO;}static unsigned int deref_uintptr(unsigned int *p){ return *p;}enum Epositive { epos_one, epos_two};int main(){ enum fred frod; enum Epositive epos = epos_two; printf("%d %d %d %d %d %d %d %d\n", a, b, c, d, e, f, g, h); /* printf("%d\n", frod); */ frod = 12; printf("%d\n", frod); frod = e; printf("%d\n", frod); /* Following should compile without warning. */ printf ("enum to int: %u\n", deref_uintptr(&epos)); return 0;}/* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/
#include <stdio.h>
enum fred
{
a,
b,
c,
d,
e = 54,
f = 73,
g,
h
};
/* All following uses of enum efoo should compile
without warning. While forward enums aren't ISO C,
it's accepted by GCC also in strict mode, and only warned
about with -pedantic. This happens in the real world. */
/* Strict ISO C doesn't allow this kind of forward declaration of
enums, but GCC accepts it (and gives only pedantic warning), and
it occurs in the wild. */
enum efoo;
struct Sforward_use {
int (*fmember) (enum efoo x);
};
extern enum efoo it_real_fn(void);
enum efoo {
ONE,
TWO,
};
struct S2 {
enum efoo (*f2) (void);
};
void should_compile(struct S2 *s)
{
s->f2 = it_real_fn;
}
enum efoo it_real_fn(void)
{
return TWO;
}
static unsigned int deref_uintptr(unsigned int *p)
{
return *p;
}
enum Epositive {
epos_one, epos_two
};
int main()
{
enum fred frod;
enum Epositive epos = epos_two;
printf("%d %d %d %d %d %d %d %d\n", a, b, c, d, e, f, g, h);
/* printf("%d\n", frod); */
frod = 12;
printf("%d\n", frod);
frod = e;
printf("%d\n", frod);
/* Following should compile without warning. */
printf ("enum to int: %u\n", deref_uintptr(&epos));
return 0;
}
/* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/