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

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

概述更新:如用户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( 更新:如用户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的所有访问都是顺序的,给出了明确定义的行为,但是序列是不确定的,给出了未指定的值.

总结

以上是内存溢出为你收集整理的c – 当f&g修改相同的全局变量未定义或未指定时,是否为表达式f()> g()的值?全部内容,希望文章能够帮你解决c – 当f&g修改相同的全局变量未定义或未指定时,是否为表达式f()> g()的值?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1250649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存