5.17分配操作员
有几个赋值运算符,所有赋值运算符都从右到左分组。所有都需要一个可修改的左值作为左操作数,赋值表达式的类型是其左操作数的类型。赋值操作的结果是赋值发生后存储在左操作数中的值;结果是一个左值。
if((result=f())==0)
,是 undefined-behavior ?答案 0 :(得分:3)
在C中,等于运算符==
与两个赋值运算符不同。因此,在语句if((result=f())==0){...}
中只有一个赋值运算符,因此C标准中用多个赋值运算符处理表达式的部分根本不相关。这个特殊的表达式是完美定义的(假设f()
是)。
有点类似的表达式while((c = getchar()) != EOF){···}
是一种相当常见的习惯用法,用于逐个字符地抓取键盘输入,直到遇到文件字符结尾。这样的习语允许你一石二鸟 - 为变量赋值,同时将该值与另一个值进行比较。