0

次のスクリプトを Godbolt (gcc 11.2) で 1 回、esp32 (xtensa gcc) で 1 回実行しました。Godbolt バージョンは "hello" を出力しませんが、ローカルの esp32 バージョンは出力します。何故ですか?

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