声明中的`declarator =initializer`是赋值表达式吗?

问题描述 投票:0回答:1
C11标准中

6.5.16 赋值运算符语法

assignment-expression: conditional-expression unary-expression assignment-operator assignment-expression assignment-operator: one of = *= /= %= += -= <<= >>= &= ^= |=
6.7 声明

语法

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

=

中的
declarator = initializer
是赋值运算符吗?

声明中的

declarator = initializer

是赋值表达式吗?

我的问题来自

评估`int x = -2147483648`时会发生什么?

c variable-assignment declaration
1个回答
3
投票
本例中的

=

字符
不是赋值运算符,而是声明语法的一部分。

这类似于

,

 用作逗号运算符、函数参数的分隔符或声明的分隔符。在这两种情况下,语言都会从周围的上下文中知道它是如何被使用的。

关于语法

declarator = initializer

,它不是赋值表达式,但
initializer
是。从 6.7.9p1 开始:

initializer: assignment-expression {initializer-list} {initializer-list,}
这意味着你可以这样做:

int x; int y = x = 3; // the second = is an assignment operator, the first one is not
    
© www.soinside.com 2019 - 2024. All rights reserved.