C 打印INT的最大值

C 打印INT的最大值,c,int,long-long,C,Int,Long Long,我尝试在程序中打印int的最大值。 使用以下代码:: #include <stdio.h> #include <limits.h> int main(void) { printf("%d",INT_MAX); return 0; } #包括 #包括 内部主(空){ printf(“%d”,INT_MAX); 返回0; } 我得到的输出是::2147483647 但是,当我将printf语句更改为printf(“%lld”,INT_MAX)时我的输出变为

我尝试在程序中打印
int
的最大值。 使用以下代码::

#include <stdio.h>
#include <limits.h>
int main(void) {
    printf("%d",INT_MAX);
    return 0;
}
#包括
#包括
内部主(空){
printf(“%d”,INT_MAX);
返回0;
}
我得到的输出是::
2147483647

但是,当我将
printf
语句更改为
printf(“%lld”,INT_MAX)时我的输出变为
577732524332023807
INT\u MAX
值应该在
long long INT
的范围内,那么为什么不能将
INT\u MAX
转换为
long long INT
中的正确数字呢


感谢您事先提供的帮助。

%lld
int
规范不正确。根据标准,这是未定义的行为:

7.21.6.1
fprintf
功能

如果有任何论点是正确的 对应转换规范的类型不正确,行为为 未定义


7.21.6.3
printf
功能

printf
函数相当于插入了参数
stdout
fprintf
在printf的参数前面


printf
是一个可变函数,它不知道它的参数类型,它依赖于接收格式字符串中的正确提示

您使用
“%lld”
调用了未定义的行为,因为您没有传递
长整型

要修复它,您需要强制转换-然后您将看到正确的结果:

printf("%lld", (long long int) INT_MAX);
启用编译器警告?:)

在调用函数时,将4个字节的数据(int-length)推送到堆栈上,然后告诉函数使用调用堆栈中的8个字节来打印它。因此,您的值后面是4字节的垃圾


您可以告诉编译器对此进行检查

如果我写
printf(“%lld”,2)会被定义吗???@user007否。它是未定义的。格式规范与类型不匹配。您好,我刚刚遇到了一些与此相关的问题,这不是也有未定义的行为吗???使用
%d
打印
char
???首先回答这个问题。非常感谢……)先生,还有一件事是
long int
int
相同??因为我尝试打印
printf(“%ld”,LONG\u MAX)但其输出与
printf(“%d”,INT_MAX)相同但它给出相同的输出。。任何原因??:\@user007:我们说这种行为是由实现定义的。尝试比较
sizeof(int)
sizeof(long)
。对于您的编译器,这些应该具有相同的值(以字节数为单位),但C标准只规定
sizeof(int)@grzegorzzpetkowski如果它们与一些编译器具有相同的大小,那么如果它们可以保存相同的值,那么拥有两种不同的数据类型有什么用??我猜我们也不能在long int和not int上执行任何特殊函数,因为它们都是数字..@user007:nope。bool、char、short和unscoped枚举被转换为int或更宽的整数类型,如整数升级