In the C11 standard
6.5.16 Assignment operators Syntax
assignment-expression: conditional-expression unary-expression assignment-operator assignment-expression assignment-operator: one of = *= /= %= += -= <<= >>= &= ^= |=
6.7 Declarations
Syntax
declaration: declaration-specifiers init-declarator-listopt ; static_assert-declaration
declaration-specifiers: storage-class-specifier declaration-specifiersopt type-specifier declaration-specifiersopt type-qualifier declaration-specifiersopt function-specifier declaration-specifiersopt alignment-specifier declaration-specifiersopt
init-declarator-list: init-declarator init-declarator-list , init-declarator
init-declarator: declarator declarator = initializer
Is =
in declarator = initializer
an assignment operator?
Is declarator = initializer
in a declaration an assignment expression?
My question comes from What happens when evaluating `int x = -2147483648`?
The =
character in this case is not an assignment operator, but part of the syntax of a declaration.
This is similar to how ,
can be used as the comma operator, a separator for function arguments, or a separator for declarations. In both cases, the language knows from the surrounding context how exactly it is being used.
Regarding the syntax declarator = initializer
, it is not an assignment expression, however initializer
is. From 6.7.9p1:
initializer:
assignment-expression
{initializer-list}
{initializer-list,}
Which means you can do this:
int x;
int y = x = 3; // the second = is an assignment operator, the first one is not