2013-03-25 79 views
9

我是一名初學者編程的學生,只是想了解背後的原因。C90不允許在printf中使用%,爲什麼?

當我使用此代碼:

#include <stdio.h> 
int main() 
{ 
double pi = 3.1415926535897932; 
printf("%lf",pi); 
return 0; 
} 

編譯器會發出這樣的警告。 ISO C90不支持 '%LF' gnu_printf格式[-Wformat]

我用gcc編譯器在Ubuntu終端用(-O -Wall -ansi -pedantic-錯誤)

背後有什麼原因這個?我搜索了網頁,發現這個用法在C99中是允許的。爲什麼C90不允許在printf中使用%?我可以使用%.16lf或%.16f並以相同的精度進行打印,那麼在C90中%lf有什麼問題?

+6

因爲直到後期才被標準化? – 2013-03-25 12:17:41

+3

'%lf'對'printf'系列沒有用處,只適用於'scanf'系列。 – 2013-03-25 12:20:45

+0

可能的重複:http://stackoverflow.com/questions/6395726/how-does-printf-and-co-differentiate-beetween-float-and-double – 2013-03-25 12:22:57

回答

8

根據C90文檔:

可選升(ELL)用於指定其後面d,I,O,U,X,或 X轉換說明應用於long int或unsigned long int類型 論據;一個可選的l,指定以下n轉換說明符適用於指向long int參數的指針;或可選 L指定以下e,E,f,g或G轉換 說明符適用於long double參數。 如果h,l或L 與任何其他轉換說明符一起出現,則行爲是 未定義。

3

C是一種不斷髮展的語言。 C標準的每個新版本都增加了新功能和行爲。

C89說l之前f導致未定義的行爲。而C90可能也是這樣說的。

C99另一方面說l之前f沒有效果。

相關問題