【发布时间】:2015-11-26 11:51:24
【问题描述】:
在此代码编译过程中,我遇到了一些奇怪的 GCC 行为:
for(int i = 9, j = 0; i >= 0; --i, j++) {
cout << i << " " << j << endl;
}
显然,这里的 i 是前增量的,而 j 是后增量的,在第一次迭代中 i 应该是 8,并且 j 应该是 0,但似乎 GCC 将 i 和 j 都视为 post-(dec/inc)remental。
所以我得到了输出
9 0
8 1
...
GCC 1.9.3 PAE,使用 -O0 编译
【问题讨论】:
-
for语句 [for(initialise,condition,this_bit_after)] 的最后一部分在循环块的内容之后执行,所以是的,它们都是关于循环体的后增量. -
“GCC 错误”是一件大事,尤其是对于这段常见的代码。三重检查问题和之前的代码。 99.999% 的问题不是编译器错误。