0

我在 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)))

因此,在一种情况下,零下的转换似乎在缩小,而在另一种情况下则没有。我无法解释这一点。

4

0 回答 0