我在 Godbolt (gcc 11.2) 和我的 esp32 (xtensa gcc) 上执行了一次以下脚本。Godbolt 版本不会打印“hello”,而本地 esp32-version 会打印。这是为什么?
typedef uint32_t TickType_t;
void foo()
{
TickType_t start = 5UL;
TickType_t max_delay = 1;
long diff = 0;
if ( 0 || max_delay - (diff = (10UL - start)) > 0) {
std::cout << "hello" << std::endl;
}
}
它似乎并不依赖于编译器,因为 Godbolt 上的 xtensa 也不会打印“hello”。这让我想知道不同的因素是什么。
我想它与类型转换有关,因为当我将其更改为
if ( 0 || max_delay > (diff = (10UL - start)))
因此,在一种情况下,零下的转换似乎在缩小,而在另一种情况下则没有。我无法解释这一点。