Search code examples
cc89

Order of expression evaluation in C


If I have the following expression:

c = (a) * (b)

What does the C90 standard say about the order evaluation of the subexpression 'a' and 'b'?


Solution

  • There is no specified order since the multiplication operator is not a sequence point. Sequence points include the comma operator, the end of a full expression, and function calls. Thus the order of evaluation of (a) and (b) is up to the compiler implementation. Therefore you shouldn't attempt to-do something in (a) that would have a side-effect that you want to be seen in (b) in order to generate a valid result.

    For instance:

    int a=5;
    int b = (a++) * (a++); //<== Don't do this!!
    

    If you want a full-listing of sequence points for C, you can check out a more thorough reference here.