【问题标题】:Could not understand a output with ++i in C/ C++ [duplicate]无法理解 C/C++ 中带有 ++i 的输出 [重复]
【发布时间】:2013-10-31 10:26:57
【问题描述】:

运行时我发现输出是:4 4. 无法理解原因。

int i = 2;
printf("%d %d", ++i, ++i);

【问题讨论】:

  • 在计算参数之前不能调用函数,可以吗?
  • @R.MartinhoFernandes: 不,但它的参数值可以在应用其参数表达式的副作用之前一成不变,因为唯一可见的序列点是 after 评估,但 在 函数调用之前。因此,3 3、3 4、4 3 和 4 4 都是这段代码的模糊合理的输出,尽管 ofc 它具有未定义的行为,所以任何事情都是允许的。

标签: c++ c printf


【解决方案1】:

你所经历的是Undefined behavior。请阅读有关序列点的信息。逗号是函数调用中的分隔符而不是运算符。

序列点是尘埃落定的时间点,到目前为止已经看到的所有副作用都保证是完整的。 C标准中列出的序列点是:

在完整表达式的评估结束时(完整的 表达式是表达式语句,或任何其他表达式 不是任何更大表达式中的子表达式); 在 ||、&&、?: 和逗号运算符处;和 在函数调用时(在评估所有参数之后,在实际调用之前)。

标准规定

在前一个序列点和下一个序列点之间,一个对象应该有它的 表达式的评估最多修改一次存储的值。 此外,应仅访问先验值以确定 要存储的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多