gpt4 book ai didi

逗号(,)运算符抑制C中括号的优先级

转载 作者:行者123 更新时间:2023-11-30 21:13:42 34 4
gpt4 key购买 nike

我刚刚开始阅读 C。

情况:

x = ( y = 3, ( z = ++y + 2 ) + 5 )

它首先评估y = 3,然后评估( z =++y + 2)

我的问题:

它应该首先评估( z =++y + 2 ),因为逗号(,)的优先级远低于括号

我的思维方式:

  1. Due to precedence we select outer parenthesis

  2. Then we need to evaluate parenthesis

  3. Under this (parenthesis) I again started applying precedence rule

  4. So I took inner bracket to evaluate first

附注:

这不是重复的

我已经浏览过这些链接,但仍然无法理解

Behavior of comma operator in C

C comma operator

What does the comma operator , do?

https://learn.microsoft.com/en-us/cpp/cpp/comma-operator

Uses of C comma operator

https://en.wikipedia.org/wiki/Comma_operator

最佳答案

您将运算符优先级与求值顺序混淆了。

运算符优先级决定子表达式的分组方式。它规定何时评估每个操作数。

逗号运算符的左操作数和右操作数之间有一个序列点。以y = 3, ( z = ++y + 2 ) + 5为例,这意味着y = 3 ( z = ++y + 2 ) + 5之前必须进行全面评估可以进行评估。

另请注意子表达式 ( z = ++y + 2 ) + 5不能保证括号内的所有内容都会先于括号内的所有内容进行求值。你只知道( z = ++y + 2 )5( z = ++y + 2 ) + 5 之前评估被评估。例如,如果您有 (z = ++y + 2) + y这将调用 undefined behavior因为第二个y可以在 ++y 的副作用之前或之后进行评估.

再举个例子,如果你有 x = (func1() + 3) + func2() ,或者func1可以先调用或 func2由于操作数的求值顺序未指定,因此可以首先调用。如果这两个函数都修改了同一个全局变量,您将无法可靠地知道该变量的值。

关于逗号(,)运算符抑制C中括号的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51246601/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com