This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Use of C's enum command with C166 compiler

I'm currently attempting to modify an automatic code generation
package (designed to run with MSVC/C++, WATCOM C/C++ and
Borland C) to autogenerate software compilable with the Keil
CA166 package. Of the standard files which have to be included
into the code, one of them contains the lines...

enum {
COMPLEX_INHERITED = -1,
COMPLEX_NO,
COMPLEX_YES
};

...but the C166 compiler 'seems' to be objecting to the fact that
I'm using a negative number within the enum command.

According to K & R the enum command should be declaring the
contents of the enum commands to be of type 'int' - so I can't
see what the problem is.

Can anyone shed any light on this? Where am I going wrong?


Yours (grateful in advance),


Richard Roebuck.

Parents
  • For instance if it is used in array subscripting, the negative value would be an error.

    Just curious, but why would negative array subscripts be an error? For example:

    char stack [100]; /* Create a stack */
    char *p;          /* Create a stack pointer */
    
    p = &stack [50];  /* Initialize the stack pointer */
    
    p [0]  = 12;      /* Put stuff onto the stack */
    p [-1] = 13;
    p [-2] = 14;

    This is legal C code and should work just fine with the Keil tools. Is there a problem we should know about here?

    Jon

Reply
  • For instance if it is used in array subscripting, the negative value would be an error.

    Just curious, but why would negative array subscripts be an error? For example:

    char stack [100]; /* Create a stack */
    char *p;          /* Create a stack pointer */
    
    p = &stack [50];  /* Initialize the stack pointer */
    
    p [0]  = 12;      /* Put stuff onto the stack */
    p [-1] = 13;
    p [-2] = 14;

    This is legal C code and should work just fine with the Keil tools. Is there a problem we should know about here?

    Jon

Children
  • You got me Jon. I started shooting my keyboard off and got called on it.

    As for the problem described though, I can not get the following to compile without generating the warning "C118 enum constant: signed value out of range":

    enum
    {
    TEST_A1 = -1,
    TEST_A2
    };

    If you change the initial value to -2, it compiles.

    If you add member TEST_A3 after TEST_A2 and leave the initial value at -2, now it won't compile.

    If the only member is TEST_A1 and it is initialized to -1, it compiles.

    It appears the problem is experienced when the enum list crosses from a negative number to zero.

  • The solution with my compiler (C166 v4.06) seems to be to explicitly equate the value which should be zero to zero.