假设我有以下代码:
int main(void)
{
int i = rand();
if (++i) ++i;
return i;
}
这里是否已经定义了行为?我知道
i = ++i
是未定义的,而在main
中的第二行包含了类似的内容。 rand()
调用是为了防止编译器优化我认为有问题的那一行。假设我有以下代码:
int main(void)
{
int i = rand();
if (++i) ++i;
return i;
}
i = ++i
是未定义的,而在main
中的第二行包含了类似的内容。 rand()
调用是为了防止编译器优化我认为有问题的那一行。
if (++i) { ++i; }
这样的事情,你的问题会消失吗?不会吗?那如果是if (++i) { x=5; ++i; }
呢? - Eugene Sh.if (++i) ++i;
,但这并不意味着两个++i
之间没有序列点。因此,这只是一种丑陋的编写方式,在两行中编写会更清晰明了。请注意,如果i == -1
,那么if (++i)
将不允许下一个++i
被执行。 - Iharob Al Asimi