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
  • Could you tell me something about this problem?

    There is no problem. The behavior of statements like

    a[i] = i++:
    

    is implementation-defined in C (see K&R, chapter "Precedence and Order of Evaluation". It contains this example). Different compilers are free to evaluate the left or the right side of the assignment first.

    It is up to the programmer to deal with the consequences.

Reply
  • Could you tell me something about this problem?

    There is no problem. The behavior of statements like

    a[i] = i++:
    

    is implementation-defined in C (see K&R, chapter "Precedence and Order of Evaluation". It contains this example). Different compilers are free to evaluate the left or the right side of the assignment first.

    It is up to the programmer to deal with the consequences.

Children