【发布时间】:2017-01-10 00:28:32
【问题描述】:
#include<stdio.h>
int main(void) {
int t;
long long n = 4294967295;
//printf("%lu",n);
return 0;
}
每当我运行上述代码时,编译器都会显示以下警告
[警告] 这个十进制常量仅在 ISO C90 中是无符号的
我的代码有什么问题?
【问题讨论】:
-
print附带的警告是否被注释掉了?因为常量的提及与传递给printf的变量无关。 -
可能是C90的规则不同。 I 标准 C (C11),没有
u后缀的十进制文字始终是有符号类型,而十六进制和八进制文字在有符号和无符号类型之间交替。 (也许这曾经也是十进制文字的行为?) -
4294967295是一个unsigned int,一些旧的编译器可能会反对,你可以试试4294967295ll。 -
@chux 我想知道这条消息。我看到一切都很好,对我来说似乎是一个无效的警告。我们应该知道使用的警告设置。如果将
LL常量分配给较小的类型,则正确的警告是,但这里一切都很好(只要printf被注释掉)。 -
@olaf 同意。我们缺少的是什么编译器,它的版本和设置是未知的。
标签: c