簡體   English   中英

printf在gcc錯誤的結果

[英]printf in gcc wrong result

案例1: printf("%f",(7/2)); 在gcc輸出中是0.000000。

案例2: float k= 7/2; printf("%f",k); 在gcc輸出是3.000000。

在第一種情況下,printf需要浮點但得到Integer所以給出了錯誤的結果。 但在第二種情況下,它進行類型轉換。

這是我的問題 -

  1. 為什么gcc在第一種情況下不會出現類型不匹配錯誤/警告?
  2. 在第二種情況下,它默認進行類型轉換,但為什么不在第一種情況下呢?

在第二種情況下,它默認進行類型轉換,但為什么不在第一種情況下呢?

在第一種情況下, 72都是int類型。 7除以2會得到一個int 使用%f打印它將調用未定義的行為 你會得到任何東西。 在這種情況下,沒有類型轉換。

嘗試這個

printf("f", (7.0/2));  

在第二種情況下, kfloat型,因此7/2的結果默認轉換為k的類型。

為什么gcc在第一種情況下不會出現類型不匹配錯誤/警告?

使用-Wall標志編譯第一個語句會發出警告:

[Warning] format '%f' expects argument of type 'double', but argument 2 has type 'int' [-Wformat=]

1)gcc默認情況下不會使用參數檢查格式字符串中的類型 - 因此它在運行時將數據(即整數)“解釋”為float

2)gcc現在在運行時將float解釋為float。

海灣合作委員會可以發出警告,但你沒有啟用它。 嘗試用標志-Wall編譯,你會看到:

warning: double format, different type arg (arg 2)

暫無
暫無

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

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