2015-12-03 59 views
0

我使用Linux x86_64和gcc 5.2.1,並且正在使用代碼來確定C編程語言中「unsigned long long」變量的最大值。在C中使用無符號long long變量的值的警告

在我的機器中,「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:在函數 '主':Ascertaining_Range.c:5:25: 警告:整數常數是如此之大,這是無符號無符號長 長= 18446744073709551615;

這裏我的問題是,它爲什麼會發出警告。該值在範圍的外圍。而且,它已被明確聲明爲無符號。

回答

1

您的代碼是正確的,這是一個虛假的警告。

爲了避免該警告你可以寫:

unsigned long long a = 18446744073709551615ull; 

的警告是對一些整數文字(略)是有用的,但不是這個特殊的一個,並且編譯器不拼命的限制警告有用的案例。

注意:確保您使用-std=c99-gnu99或更高版本; 1999年之前C沒有正式擁有unsigned long long,不同的編譯器用大整數文字做了奇怪的事情。