这是我的代码。
#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
这似乎是一个 gcc bug。 当我们注释掉调用时
f(1,1)
程序输出是正确的 1
。