It is comma operator. C11 standard tells about one use case of this kind of operator.
C11 standard 6:5:17
Comma operator
The left operand of a comma operator is evaluated as a void
expression; there is a sequence point between its evaluation and that
of the right operand. Then the right operand is evaluated; the result
has its type and value.114)
The comma operator (as described
in this subclause) cannot appear in contexts where a comma is used to
separate items in a list (such as arguments to functions or lists of
initializers). On the other hand, it can be used within a
parenthesized expression or within the second expression of a
conditional operator in such contexts. In the function call f(a, (t=3,
t+2), c) the function has three arguments, the second of which has the
value 5.