将C语言多值括号表达式误认作tuple赋值给int得100,原理是什么?
C语言逗号表达式与tuple相关问题解答
表达式运行逻辑
你写的(12, 45, 58, -1, 90, 100)不是tuple语法,这是C语言里的逗号表达式,运行规则如下:
- 逗号运算符的结合性为从左到右,优先级是所有C运算符中最低的
- 整个括号内的逗号表达式会按从左到右的顺序依次计算每个子表达式的值
- 除最后一个子表达式外,其余子表达式的计算结果会被直接丢弃,仅保留最后一个子表达式的值作为整个逗号表达式的最终返回值
- 若前面的子表达式存在副作用(比如变量赋值、IO操作等),这些副作用会在计算到对应子表达式时正常生效
对应你给出的代码i = (12, 45, 58, -1, 90, 100);,表达式会依次计算12、45、58、-1、90、100,最终返回最后一个值100赋值给变量i,因此打印结果为100。
C语言tuple支持情况
C语言原生不支持tuple类型,C标准从始至终没有内置多值tuple的语法和实现。如果需要使用类似tuple的能力,需要自行定义结构体实现,或引入第三方工具库。
内容的提问来源于stack exchange,提问作者user9026
相关产品推荐
相关产品推荐

