尝试使用printfs时出现神秘的c调试问题

O_O*_*O_O 0 c debugging printf

好的,伙计们.我以前从未遇到过这种情况,这让人难以置信,并且不合逻辑.我有一个有点复杂的循环,我想尝试通过放置一些printf语句来查看一切是否正常.我使用printf查看中间产品并验证答案是否正确.然后,当我将printf注释到中间产品时,答案是错误的.有没有人见过这个?这让我疯了,我不知道printfs如何改变答案.... X_x如果有帮助,我正在使用ac/c ++编译器来处理DSP.谢谢你的任何建议..

这是一个片段......

printf("splitBackground = %d, numWindowPoints = %d\n", splitBackground, numWindowPoints);
splitBackground = splitBackground/numWindowPoints;
printf("%d ", splitBackground);
Run Code Online (Sandbox Code Playgroud)

这很好但是当我注释掉第一行代码时,结果证明这是非常不正确的.:(

Jim*_*wis 7

很可能你在代码中犯了一个导致未定义行为的错误.并且"未定义"意味着"它可能在某些情况下起作用".

为什么要插入一个printfmake it工作?一些可能性:

它会改变程序不同部分之间或程序与世界其他部分之间的时序关系.

printf调用禁止可能发生的编译器优化.

printf调用以防止错误发生的方式更改标准库的内部状态.

printf调用以防止错误发生的方式与硬件交互.

(请注意,在调试器下运行时,许多相同的注意事项也是如此 - 因此术语"heisenbug":只有在您不注意它时才会出现的错误.)