c – 当f&g修改相同的全局变量未定义或未指定时,是否为表达
发布时间:2020-12-16 05:52:36 所属栏目:百科 来源:网络整理
导读:更新:如用户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
更新:如用户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中所指定:
所以对i的所有访问都是顺序的,给出了明确定义的行为,但是序列是不确定的,给出了未指定的值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |