/* 
  This example considers the assignment:
      val2 = val+++++val2;
  This is illegal, because it is considered to be
      val2 = val ++ ++ +val2;
  and it is illegal to have two ++'s in a row.

  illegal forms:
     val2 = (val++)++ +val2;  (gcc: invalid lvalue in increment)
     val2 = val+++++val2;  (gcc: invalid lvalue in increment)
     val2 = val++ +++val2; (gcc: invalid lvalue in increment)
     val2 = val++++ +val2; (gcc: invalid lvalue in increment)

    (cc: operand must be modifiable lvalue: op "++")

  legal forms are shown below
  (Program based on source from W. Jennings.)
 */

#include <stdio.h>

void main(void)
{
   int val = 10; int val2 = 20; int vtemp;
   val2 = ++val;
   printf("Using: val2 = ++val; val == %i; val2 == %i\n", val, val2);
  
   val = 10; val2 = 20;
   val2 = val+++ ++val2;
   printf("Using: val2 = val+++ ++val2; val == %i; val2 == %i\n", val, val2);

   val = 10; val2 = 20;
   val2 = (val++)+(++val2);
   printf("Using: val2 = (val++)+(++val2); val == %i; val2 == %i\n", val, val2);     
   val = 10; val2 = 20;
   val2 = val+++(++val2);
   printf("Using: val2 = val+++(++val2); val == %i; val2 == %i\n", val, val2);
    
   val = 10; val2 = 20;
   val2 = val++ + ++val2;
   printf("Using: val2 = val++ + ++val2; val == %i; val2 == %i\n", val, val2);    
   val = 10; val2 = 20;
   val2 = val++ +val2;
   printf("Using: val2 = val++ +val2; val == %i; val2 == %i\n", val, val2);

   val = 10; val2 = 20;
   val2 = val+++val2;
   printf("Using: val2 = val+++val2; val == %i; val2 == %i\n", val, val2);

   val = 10; val2 = 20;
   val2 = val+ ++val2;
   printf("Using: val2 = val+ ++val2; val == %i; val2 == %i\n", val, val2);

}
/* Output:

Using: val2 = ++val; val == 11; val2 == 11
Using: val2 = val+++ ++val2; val == 11; val2 == 31
Using: val2 = (val++)+(++val2); val == 11; val2 == 31
Using: val2 = val+++(++val2); val == 11; val2 == 31
Using: val2 = val++ + ++val2; val == 11; val2 == 31
Using: val2 = val++ +val2; val == 11; val2 == 30
Using: val2 = val+++val2; val == 11; val2 == 30
Using: val2 = val+ ++val2; val == 10; val2 == 31

*/

