a + b + ccan be evaluated as (a + b) + c, a + (b + c), (a + c) + b, (c + b) + a, etc. Parenthesis control operator precedence, parenthesis do not control order of evaluation.
In particular, function parameters can be evaluated either left to right or right to left, depending on the particular calling conventions used.
If the operands of an associative operator + or * are floating point values, the expression is not reordered.
assert(int.size == (int*).size);
Minor differences can be handled by constant defined in a system specific import, and then using that constant in an if statement.