微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 当f&g修改相同的全局变量未定义或未指定时,是否为表达式f()> g()的值?

更新:如用户ecatmur所示,它与 In C99,is f()+g() undefined or merely unspecified?的重复(尽管有关C99的问题,但C的答案没有改变).答案是:未指定(两种情况).

考虑以下C 14代码片段:

int i = 0;
int x() { i++; return i;}
int y() { i++; return i;}
bool z = (x() > y());  // unspecified or undefined ?

z的价值是不是没有明确的,还是这个未定义的行为?

根据我的理解(请纠正如果我错了),表达的那种:我>我将是未定义的行为,因为我们在一对序列点之间变异相同的变量两次,但是上述情况(突变发生在单独的函数中)呢?

那这个呢呢

bool z = (x() > i++);  // undefined or unspecified Now ?

解决方法

在这两种情况下,值都是未指定的,但是行为是明确的.函数调用对于调用它们的表达式中的其他评估是不确定的顺序,如[intro.exececution] 1.9 / 15中所指定:

Every evaluation in the calling function (including other function calls) that is not otherwise specifically sequenced before or after the execution of the body of the called function is indeterminately sequenced with respect to the execution of the called function

所以对i的所有访问都是顺序的,给出了明确定义的行为,但是序列是不确定的,给出了未指定的值.

原文地址:https://www.jb51.cc/c/113509.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐