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

array index type of signed int

Hi list,

i'm working with c51v750a. My problem:

int array[ 0] _at_ 0x7600; //xdata
unsigned char index = 0; //xdata

printf("%d", &array[ index]);
printf("%d", &array[(unsigned char)(index - 1)]); //what is wrong?

// Result:
// 30208 --> 0x7600 (correct)
// 30206 --> 0x75FE == array[ -1] incorrect, // expected array[255] @ 0x77FE

I've read in Compiler's changelog [v7.50] that there was a fix for array with signed int index.

I don't need a workaround, but this seems like a compiler-bug. Or is my "logic" incorrect?

Thanks in advance,
Lars

Parents
  • There's definitely something odd going on here. Take a look at this:

       int xdata array[256] _at_ 0x7600; //xdata
       unsigned char index = 0;
       unsigned char idx;
    
       idx=(unsigned char)(index - 1);
       printf("%p\n", &array[(unsigned char)(index - 1)]); //x:75FE
       printf("%p\n", &array[idx]); //x:75FE
       printf("%p\n", array+(unsigned char)(index - 1)); //x:77FE
       printf("%p\n", array+idx);   //x:75FE
    

Reply
  • There's definitely something odd going on here. Take a look at this:

       int xdata array[256] _at_ 0x7600; //xdata
       unsigned char index = 0;
       unsigned char idx;
    
       idx=(unsigned char)(index - 1);
       printf("%p\n", &array[(unsigned char)(index - 1)]); //x:75FE
       printf("%p\n", &array[idx]); //x:75FE
       printf("%p\n", array+(unsigned char)(index - 1)); //x:77FE
       printf("%p\n", array+idx);   //x:75FE
    

Children