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

Why Keil generates differen outputs from the other compilers with the same code?

I am using the following code in different compiler:

#include <stdio.h>

int main(void)
{
  int i = 0;
  int b[10] = {100,101,102,103,104,105,106,107,108,109};
  int c[10] = {0,1,2,3,4,5,6,7,8,9};

  b[i + 0] = c[i++ % 100];
  b[i + 0] = c[i++ % 100];
  b[i + 0] = c[i++ % 100];
  b[i + 0] = c[i++ % 100];
  b[i + 0] = c[i++ % 100];
  b[i + 0] = c[i++ % 100];

  for(i = 0; i < 10; i++)
     printf("b[%d] = %d\n",i,b[i]);
  return 0;
}

But I am getting different output by using Keil,
the output as follows:

//Keils output... uVision3 V3.53, compiler Armcc.exe
b[0] = 100
b[1] = 0
b[2] = 1
b[3] = 2
b[4] = 3
b[5] = 4
b[6] = 5
b[7] = 107
b[8] = 108
b[9] = 109

//Microsoft Visual STD 6.0 output
b[0] = 0
b[1] = 1
b[2] = 2
b[3] = 3
b[4] = 4
b[5] = 5
b[6] = 106
b[7] = 107
b[8] = 108
b[9] = 109
Press any key to continue



//Microsoft Visual STD 2005 output
b[0] = 0
b[1] = 1
b[2] = 2
b[3] = 3
b[4] = 4
b[5] = 5
b[6] = 106
b[7] = 107
b[8] = 108
b[9] = 109
Press any key to continue

//Borland C++Builder6.0 output....
b[0] = 0
b[1] = 1
b[2] = 2
b[3] = 3
b[4] = 4
b[5] = 5
b[6] = 106
b[7] = 107
b[8] = 108
b[9] = 109

Could you tell me something about this problem?

Parents
  • Always be careful about using a variable twice in an expression, if you also change the value of the variable in the expression.

    In your code, both the left and right side of the assign makes use of i, but the right side is also modifying i with the ++.

    What happens if the compiler computes the destination address before - or after - it evaluates the right-hand side?

Reply
  • Always be careful about using a variable twice in an expression, if you also change the value of the variable in the expression.

    In your code, both the left and right side of the assign makes use of i, but the right side is also modifying i with the ++.

    What happens if the compiler computes the destination address before - or after - it evaluates the right-hand side?

Children