我尝试打印程序中的最大值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.
在此先感谢您的帮助.
printf 是一个可变函数,它不知道它的参数类型,它依赖于在格式字符串中接收正确的提示.
您使用了调用未定义的行为"%lld",因为您尚未传递long long int.
要修复它,你需要施放 - 然后你会看到正确的结果:
printf("%lld", (long long int) INT_MAX);
Run Code Online (Sandbox Code Playgroud)
启用编译器警告?:)
%lld是不正确的规格int.根据标准,它是未定义的行为:
7.21.6.1
fprintf功能....
如果任何参数不是相应转换规范的正确类型,则行为未定义.
7.21.6.3
printf功能....
该
printf函数等同于fprintf在参数stdout之前插入的参数printf.
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |