gpt4 book ai didi

c - C 中的 0/0 - gcc-7 或更高版本

转载 作者:太空宇宙 更新时间:2023-11-04 05:15:59 26 4
gpt4 key购买 nike

在数学上,0/0 是未定义的。但是,在 C 编程中(尤其是 ubuntu 上的 gcc 编译器 gcc-7.3.0),它产生的答案是 1。我想知道原因。它是通过重复减法来工作的吗?对于相同的代码,如果我使用 n = 1/n,我会得到一个浮点异常。但是,对于 gcc-5.3.0,它会产生错误。

#include <stdio.h>

int main() {
int n = 5;
n = n - 5;
switch (n) {
case 0:
printf("n= %d", n);
n = n / n;
printf("n calc= %d", n);
break;
case 5:
printf("n=5");
break;
default:
printf("n=1");
break;
}
return 0;
}

最佳答案

除以零是 C 编程中的未定义行为(C11 6.5.5 §6)。这意味着没有可预测的结果,也不知道您的程序可能会做什么。

尝试推理为什么您会得到“任何事情都可能发生”的特定结果并不是很有意义。它可能会打印 1,可能会打印 42,也可能什么都不打印。该程序可能会崩溃并烧毁。如果您运行该程序两次,您可能会得到不同的结果。等等。

至于为什么你不会得到编译器错误,编译器不能或没有义务发现或诊断运行时错误。程序员需要避免大多数未定义行为的情况。

如果您使用纯整数常量表达式(例如 int x = 0/0;),一些优秀的编译器可能会发出警告,但是发现此错误不是编译器的工作.这是程序员的工作。因此,您应该养成在应用操作数之前始终检查 /% 的正确操作数是否为零的习惯。

关于c - C 中的 0/0 - gcc-7 或更高版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55916832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com