亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標題:
GCC編譯器,將double轉換為float為什么不產生告警?
[打印本頁]
作者:
yl130029
時間:
2013-07-21 12:43
標題:
GCC編譯器,將double轉換為float為什么不產生告警?
各位大俠,小弟在寫一個程序時有一個疑問:GCC為什么不會對double賦值給float型變量產生告警?VC上則會告警,我的系統(tǒng)是Ubuntu 12.0,
程序如下:
ncludei<stdio.h>
int main()
{
int lowest = 0;
int uppest = 300;
int step = 20;
int fahr = lowest;
float celsius;
while(fahr <= uppest)
{
celsius = 5.0 / 9 * (fahr - 32);
printf("fahr = %d\tcelsius=%f\n", fahr, celsius);
fahr += step;
}
printf("sizeof(float)= %d,\tsizeof(double)= %d, sizeof(long double)= %d\n", sizeof(float), sizeof(double), sizeof(long double));
return 0;
}
編譯時沒有產生告警,我預期是在 celsius = 5.0 / 9 * (fahr - 32);產生告警的。另外 printf("sizeof(float)= %d,\tsizeof(double)= %d, sizeof(long double)= %d\n", sizeof(float), sizeof(double), sizeof(long double));輸出的結果如下:sizeof(float)= 4, sizeof(double)= 8, sizeof(long double)= 12
請大神指點,多謝~
作者:
yl130029
時間:
2013-07-21 12:45
小弟在線等,求大神指點~
作者:
fender0107401
時間:
2013-07-21 15:30
-Wall
作者:
yl130029
時間:
2013-07-21 16:44
回復
3#
fender0107401
加上-Wall,依舊沒有任何waring
作者:
pmerofc
時間:
2013-07-21 16:53
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
yl130029
時間:
2013-07-21 19:15
回復
5#
pmerofc
多謝哈
作者:
myworkstation
時間:
2013-07-21 22:31
回復
1#
yl130029
VC默認啟用了/fp:precise 選項,這個不屬于標準規(guī)定的行為,算是VC++自己的擴展。這個選項“在 x86 處理器上使用 /fp:precise 時,編譯器將對浮點類型的變量執(zhí)行舍入,使其達到賦值、強制轉換以及將參數傳遞給函數時所需的適當精度“,可見這個選項使用的浮點處理規(guī)則由運行時提前到編譯期,所以你遇到警告應該和這個相關。改更其它選項或禁用此功能應該就沒這個選項了。具體可參考:
http://msdn.microsoft.com/zh-cn/library/vstudio/e7s85ffb.aspx
作者:
harmony2013
時間:
2013-07-22 17:36
首先,double 和 float 數據類型,C99標準只是規(guī)定了他們的范圍吧。有兩種情況, double 范圍 必須 > float 范圍。 第二種, double 范圍 必須 >= float 范圍
我沒查過具體標準,以我的估計 第二種可能性很大。有點類似 sizeof(long) >= sizeof(int)
假如是第二種情況,在具體實現上,double 就有可能 = float。 所以,C99之類的標準是不會要求編譯器告警的。
具體實現告警肯定是編譯器自己的事情。
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2