-
82 votesanswersviews
重新加载未定义的行为和序列点
将此主题视为以下主题的续篇: 上一期安装未定义的行为和序列点 让我们重新审视这个有趣而复杂的表达(斜体短语取自上述主题* smile *): i += ++i; 我们说这会调用undefined-behavior . 我认为,当这样说时,我们隐含地假设 i 的类型是内置类型之一 . 如果 i 的类型是用户定义的类型怎么办?比如它的类型是 Index ,这篇文章稍后会定义(见下文) . 它还会... -
6 votesanswersviews
i = post_increment_i()的行为是指定的,未指定的还是未定义的?
考虑以下C程序: int i = 0; int post_increment_i() { return i++; } int main() { i = post_increment_i(); return i; } 关于2011版C标准(称为C11),以下哪种替代方案是正确的: C11保证主要返回0 . C11保证main返回0或1 . 根据C11,此程序的行为未... -
3 votesanswersviews
c - 为什么i = i调用未定义的行为? [重复]
这个问题在这里已有答案: Why are these constructs using pre- and post-increment undefined behavior? 14个答案 我理解C使用序列点的概念来识别模糊计算,并且 = 运算符不是序列点 . 但是,我无法看到执行该语句时有任何歧义 i = ++i 根据我的理解,这仅仅是评估 &i 处的任何内容,增加它并将其存储在同一位... -
732 votesanswersviews
为什么这些构造使用前后增量未定义的行为?
#include <stdio.h> int main(void) { int i = 0; i = i++ + ++i; printf("%d\n", i); // 3 i = 1; i = (i++); printf("%d\n", i); // 2 Should be 1, no ? vola... -
732 votesanswersviews
为什么这些构造使用前后增量未定义的行为?
#include <stdio.h> int main(void) { int i = 0; i = i++ + ++i; printf("%d\n", i); // 3 i = 1; i = (i++); printf("%d\n", i); // 2 Should be 1, no ? vola... -
924 votesanswersviews
未定义的行为和序列点
什么是“序列点”? 未定义的行为和序列点之间的关系是什么? 我经常使用像_284620这样有趣而复杂的表达方式来让自己感觉更好 . 我为什么要停止使用它们? 如果您已阅读此内容,请务必访问后续问题Undefined behavior and sequence points reloaded . (注意:这是Stack Overflow的C FAQ的一个条目 . 如果你想批评提供这种形式的常见问题解...