簡體   English   中英

使用float格式說明符打印int變量

[英]Printing int variables with float format specifier

int main()
{
    int a=5;
    float b=7.5;

    printf("%d %f\n",a,b);
    printf("%d %f\n",a,a);

    return 0;
}

當我在gcc編譯器中編譯這個輸出時是

5 7.500000
5 7.500000

但是在視覺工作室中,輸出是

5 7.500000
5 0.000000

我無法理解gcc編譯器輸出。

printf原型是:

int printf(const char *format, ...);

C11(n1570),第6.5.2.2節函數調用

函數原型聲明符中的省略號表示法導致參數類型轉換在最后聲明的參數之后停止。 默認參數提升是在尾隨參數上執行的。

C11(n1570),第6.5.2.2節函數調用

對每個參數執行整數提升,並將類型為float的參數提升為double。 這些被稱為默認參數促銷。

因此,沒有使用printf調用執行其他參數提升。 特別是, a不會轉換為double 因此,它會導致一個未定義的行為: printf將嘗試獲得double給定大小( sizeof(double) )和給定的內存表示,這可能是從不同的int

C11(n1570),第7.21.6.1的fprintf功能

如果轉換規范無效,則行為未定義。 如果任何參數不是相應轉換規范的正確類型,則行為未定義。

此外,您可以查看gcc生成的ASM代碼,了解正在發生的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM