当我遇到这个奇怪的事情时,我正在 gdb 中调试:
(gdb)
107 newIterationRequired = infoAvailableUntil+1 < sqrt(input)+1 && isPrime ? TRUE : FALSE;
(gdb)
107 newIterationRequired = infoAvailableUntil+1 < sqrt(input)+1 && isPrime ? TRUE : FALSE;
(gdb) print infoAvailableUntil+1 < sqrt(input)+1 && isPrime ? TRUE : FALSE
$11 = FALSE
(gdb) s
108 if (newIterationRequired)
(gdb) print newIterationRequired
$13 = TRUE
newIterationRequired
的类型是一个模仿 C++ bool 行为的枚举:
typedef enum { FALSE, TRUE } bool;
这怎么可能?
最佳答案
GDB 没有正确评估 sqrt,如下所示:Why does gdb evaluate sqrt(3) to 0?
关于条件评估为真,而调试器说它应该为假,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5115866/