次のスクリプトを 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)))
そのため、あるケースではサブゼロの縮小変換があるようですが、他のケースではそうではありません。これは説明できません。