> From: address@hidden
[...]
> So that explains the difference. Seems like there could be a better
> error message for this case, 'don't use enum here', alas "The
> preprocessor does not know anything about types in the language"...
Here's a cute/ugly little macro that might help you find the errors
you're looking for:
#define ctassert(n,e) extern unsigned char n[(e)?0:-1]
Here's an example of how you might use it:
enum{a,b,c,d,last};
#define MAX 2
ctassert(big_enough,(last <= MAX));
Note that the macro does not need to be invoked from within a function.
If the test fails, the error message is almost pretty good, depending on
what you choose for the array name (sztest.c:6: error: size of array
`big_enough' is negative).
Refinements of the concept left as an exercise for the reader. Regards,