亚洲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