打印INT的最大值

use*_*007 2 c int long-long

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

#include <stdio.h>
#include <limits.h>
int main(void) {
    printf("%d",INT_MAX);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:: 2147483647

但是,当我改变我的printf声明到printf("%lld",INT_MAX);我的输出成为577732524332023807.INT_MAX值应该在范围内long long int,那么为什么它无法转换INT_MAX为正确的数字long long int.

在此先感谢您的帮助.

Kar*_*ath 7

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

您使用了调用未定义的行为"%lld",因为您尚未传递long long int.

要修复它,你需要施放 - 然后你会看到正确的结果:

printf("%lld", (long long int) INT_MAX);
Run Code Online (Sandbox Code Playgroud)

启用编译器警告?:)


Ale*_*exD 6

%lld是不正确的规格int.根据标准,它是未定义的行为:

7.21.6.1 fprintf功能

....

如果任何参数不是相应转换规范的正确类型,则行为未定义.


7.21.6.3 printf功能

....

printf函数等同于fprintf在参数stdout之前插入的参数printf.

  • @ user007否.未定义.格式规范与类型不匹配. (2认同)

小智 5

在调用函数时将4个字节的数据(int-length)压入堆栈,然后告诉函数从调用堆栈中消耗8个字节来打印它.所以你的价值落后于4个字节的垃圾.

您可以告诉编译器检查这一点.