开车轧耗子吧 关注:22贴子:293
  • 0回复贴,共1

[奇葩问题记录 000001号] 断点位置不科学导致观察结果错误

只看楼主收藏回复

int main()
{
//for开始
for (int i = 3; i < 100; i += 2)
//调试器查找下一语句, 发现应该是这个↓
for (int j = 3; j <= i; ++j)
//再查找下一语句, 发现应该是这个↓
if (0 == i%j)
//再次查找下一语句, 发现应该是这个↓
(i == j) && printf("%d ", i) || (j = i);
//再次查找下一语句, 此时, 如果最外层的for没有省略大括号, 调试器就会认为大括号"}"是"下一执行语句"
//然而如果像这样省略了大括号, 调试器就"暂时的"误认为"下一语句"是后边的"xxxxxxx"
//在语句"xxxxxxx"这看了一眼,才发现上边的for原来省略了大括号,还没跑完,于是又回到"for开始"继续跑
//(其实这条"任意语句"在此时就起到了作为for作用域判断的"}"的作用)
xxxxxxx;
/*
所以无论这个xxxxxxx是什么语句, 只要在它上边下断点, 省略了最外层大括号的嵌套for就会每跑出一个结果就在此处断一下,
也就是说, 要想一次看到上面嵌套for的所有输出结果, 就不能在它后边的第一条语句xxxxxx上下断点, 而是应该下在更后面的语句上,
这个"xxxxxxx"可以是任意语句, 包括空语句";", 以及return
*/
return 0;
}


IP属地:山东1楼2016-11-02 09:37回复