#include<stdio.h>
int main(void) {
int t;
long long n = 4294967295;
//printf("%lu",n);
return 0;
}
每当我运行上面的代码时,编译器都会显示以下警告
[警告]此十进制常数仅在ISO C90
中无符号
我的代码出了什么问题?
答案 0 :(得分:2)
在ISO C中,LOAD
的行为在C90和C99之间发生了变化。
在C90中,在普通系统上,这是无符号值,4294967295
(在32位系统上)或unsigned int
(在16位系统上)。但是在C99中,这是在这些系统上签名的unsigned long
。
您可以停用此警告,或使用整数后缀来表明您了解问题,例如: long long
。
答案 1 :(得分:0)
对于long long int,您需要%lld
格式说明符:
long long n = 4294967295;
printf("%lld", n);
对long long int类型使用错误的格式说明符%lu
会导致未定义的行为。