Order of evaluation of the operands of any C operator, including the order of evaluation of function arguments in a function-call expression, and the order of evaluation of the subexpressions within any expression is unspecified (except where noted below). The compiler will evaluate them in any order, and may choose another order when the same expression is evaluated again.

The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions.

There is no concept of left-to-right or right-to-left evaluation in C, which is not to be confused with left-to-right and right-to-left associativity of operators: the expression a + b + c is parsed as (a + b) + c due to left-to-right associativity of operator+, but the subexpression c may be evaluated first (or last, or at the same time as a or b) at run time.

The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions.

value computation: calculation of the value that is returned by the expression. This may involve determination of the identity of the object (lvalue evaluation) or reading the value previously assigned to an object (rvalue evaluation)

The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions.

side effect: access (read or write) to an object designated by a volatile glvalue, modification (writing) to an object, modifying a file, modifying the floating-point environment (if supported), or calling a function that does any of those operations.

The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions.

* evaluations of A and B are unsequenced: they may be performed in any order and may overlap (within a single thread of execution, the compiler may interleave the CPU instructions that comprise A and B)

The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions.

* evaluations of A and B are indeterminably-sequenced: they may be performed in any order but may not overlap: either A will be complete before B, or B will be complete before A. The order may be the opposite the next time the same expression is evaluated.

The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions.

There is a sequence point after evaluation of the first (left) operand and before evaluation of the second (right) operand of the following binary operators: && (logical AND), || (logical OR), and , (comma).

The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions.

The side effect (modification of the left argument) of the direct assignment operator and of all compound assignment operators is sequenced after the value computation (but not the side effects) of both left and right arguments. (depuis C11)

The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions.

There is a sequence point after the evaluation of a full expression (an expression that is not a subexpression: typically something that ends with a semicolon or a controlling statement of if/switch/while/do) and before the next full expression.

The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions.

There are sequence points before and immediately after each call to a comparison function made by the library functions qsort and bsearch, as well as between any call to the comparison function and the movement of the associated objects made by qsort (depuis C99)

The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions.

A function call that is not sequenced before or sequenced after another function call is indeterminately sequenced (CPU instructions that constitute different function calls cannot be interleaved, even if the functions are inlined) (depuis C11)

The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions.

With respect to an indeterminately-sequenced function call, the operation of compound assignment operators, and both prefix and postfix forms of increment and decrement operators are single evaluations. (depuis C11)

The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions.