unsigned long
的范围超出限制。
将
long
更改为unsigned long
并尝试找到使其过大的数字。
因此,我的方法是首先获取我的计算机上unsigned long
的大小:
printf("SIZEOF ULONG: %lu", sizeof(unsigned long));
这将打印8
作为结果。因此,假设在我的机器上,unsigned long
将占用64位,我查找了维基百科上的最大范围。
64位(字、双字、长字、长长、四重、四字、int64)
- 无符号:从0到18,446,744,073,709,551,615
unsigned long
会在未增加值之前编译而不产生警告。然而结果是不同的。编译以下程序会产生警告。
#include <stdio.h>
int main()
{
unsigned long value = 18446744073709551615;
printf("SIZEOF ULONG: %lu", sizeof(unsigned long));
printf("VALUE: %lu", value);
return 0;
}
bla.c: In function ‘main’:
bla.c:5:27: warning: integer constant is so large that it is unsigned
unsigned long value = 18446744073709551615;
^~~~~~~~~~~~~~~~~~~~
那么为什么gcc会抱怨该值过大,我以为我已经将其声明为unsigned
了呢?
#include <limits.h>
并使用ULONG_MAX
。 - pmgsize_t
的变量,应该使用%zu
格式说明符,而不是%lu
。 - Weather Vane