为什么我的 C++ 代码在使用 -O2 时出现错误输出?

问题描述 投票:0回答:1

这是我的代码。

#include <cstdio>
struct Node {
    int x;
};
Node f(int A, int B) {
    if (A < 0) return {0};
    return {A / B + (A % B != 0)};
}
Node g(int C, int D) {
    if (C > 0) return {0};
    return {C / D + (C % D != 0)};
}
int main() {
    int n;
    scanf("%d", &n);
    f(1, 1);
    Node t = g(-1, n);
    printf("%d\n", t.x);
}

然后我用:

g++-13 tmp.cpp -o tmp -O0
。 我输入
2
,它应该输出
1

但是
g++-13 tmp.cpp -o tmp -O2
我得到了
0

我认为不存在未定义的行为。为什么我得到了错误的结果?

操作系统:Linux x86-64 ubuntu23.10 6.5.0-21-generic
海湾合作委员会版本:>=9.2.0

c++ gcc g++
1个回答
0
投票

这似乎是一个 gcc bug。 当我们注释掉调用时

f(1,1)
程序输出是正确的
1

© www.soinside.com 2019 - 2024. All rights reserved.