%d 为长整型

2024-05-01

下面的代码正确吗?据我的理解,它应该不能正常工作,但是在Dev-C++编译器上,它可以正常工作。有人可以详细解释一下吗?

#include<limits.h>

int main()
{
long int num_case=LONG_MAX;

scanf("%d",&num_case);

printf("%ld",num_case);
return 0;
}

Thanks


与标准 C 库告诉您不要做的大多数事情一样,它会调用未定义的行为。未定义意味着它可能在某些条件下工作,但在您最意想不到的时候崩溃。

在这种情况下,它起作用是因为long int and int实际上是相同的数字表示形式:四个字节,二进制补码。对于其他平台(例如 x86-64 Linux),情况可能并非如此,您可能会看到某种问题。特别是8字节的高位字节long int将保持未初始化状态。

EDIT:问“但它会崩溃吗”是错误的思维方式。仅将未初始化的字节读入类型变量long int根据语言标准,允许 C 程序崩溃。我们不需要找到这样做的平台示例,就可以了解该程序的指定不明确。这就是我想说的。 C 不会立即向您扔出规则手册,它会等到您移植并打破最初的假设。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

%d 为长整型 的相关文章

随机推荐