相关疑难解决方法(0)

括号是否强制执行评估顺序并定义未定义的表达式?

当我遇到这个问题时,我正在阅读我的教科书

  1. 在下面的表达式之后,a的值是多少?
    假设a的初始值为5.Mention步骤
    • 一个+ =(A ++)+(++ A)

起初我认为这是未定义的行为,因为a已被多次修改.
那么我就读了这个问题并说它提到了步骤所以我可能认为这个问题是正确的.

所以我的问题是:

  • 应用括号是否定义了未定义的行为?
  • 是否在评估括号表达式后创建了序列点?
  • 如果已定义,则括号如何重要,因为++和()具有相同的优先级

注意:一个解释清楚的答案将得到我的投票

c c++ expression operator-precedence undefined-behavior

13
推荐指数
2
解决办法
1742
查看次数

赋值语句中右侧的增量表达式以哪种顺序排列?这是不确定的?

我最近在C中学到了未定义的行为,但是这个特定的代码在一个站点中用作"逗号作为运算符"的示例,虽然我理解第2行中的y = x ++,但我不明白子表达式的顺序在第2行进行评估.我认为这是未定义的行为,但我不确定,因为该网站没有提及任何内容.

int main()
{
    int x = 10, y;

    y = (x++, printf("x = %d\n", x), ++x, printf("x = %d\n", x), x++);

    printf("y = %d\n", y);
    printf("x = %d\n", x);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

x = 11
x = 12
y = 12
x = 13
Run Code Online (Sandbox Code Playgroud)

c comma-operator undefined-behavior

1
推荐指数
1
解决办法
162
查看次数