在C中给出unsigned long long变量值的警告

时间:2015-12-03 02:46:33

标签: c

我正在使用Linux x86_64和gcc 5.2.1并且我正在使用代码来确定" unsigned long long"的最大值。 C编程语言中的变量。

在我的机器中," unsigned long long"是8个字节。做数学告诉我范围应该是0到(2 ** 64) - 1,这是: 0到18446744073709551615.代码如下:

#include<stdio.h>

int main()
{
    unsigned long long a = 18446744073709551615;

    printf("a: %llu\n", a);

return 0;
}

当我编译它时,我得到以下输出:

  

Ascertaining_Range.c:在函数'main'中:Ascertaining_Range.c:5:25:   警告:整数常量太大,以至于无符号无符号   long long a = 18446744073709551615;

我的问题是,为什么要发出警告。该值在该范围的外围。而且,它已被明确声明为无符号。

1 个答案:

答案 0 :(得分:1)

您的代码是正确的,这是一个虚假的警告。

为了避免警告你可以写:

unsigned long long a = 18446744073709551615ull;

警告对某些整数文字(稍微)有用,但不是特定的,并且编译器并没有非常努力地将警告限制在有用的情况下。

NB。确保您使用的是-std=c99-gnu99或更高版本;在1999年之前,C没有正式拥有unsigned long long,并且不同的编译器使用大整数文字做了奇怪的事情。