Well, as Bench pointed out, this is undefined behavior, but lets think about why.
Technically speaking the post-increment operator returns the current value of the variable, then increments the value. So, given a=10 then the expression:
c = a++ + a++ + a; should evaluate as, 10 + 11 + 12, the 10, because that if the current value of a, but a gets incremented, so the next a is 11, and then incremented, and finally a= 12, c = 33.
Some compilers may in fact return this value sometimes. The problem is that different compilers will evaluate the expression in different ways. For example it may be evaluated from right to left giving 11 + 10 + 10. Many compilers will not increment the value until after the expression has been evaluated, which yields, 10 + 10 + 10, and then a becoms 12. The point is, that there are no rules defining how the compiler must evaluate this type of expression.
So... to reiterate:
QUOTE(Bench @ 9 Mar, 2008 - 03:50 AM)

its undefined behavior, the result could be anything