C90不允许在printf中使用%lf,为什么?

时间:2013-03-25 12:11:26

标签: c

我是初学者编程学生,只是想了解这背后的原因。

当我使用此代码时:

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

编译器发出此警告。 ISO C90不支持'%lf'gnu_printf格式[-Wformat]

我在ubuntu终端使用gcc编译器(-o -Wall -ansi -pedantic-errors)

这背后的原因是什么?我搜索了网页,发现在C99中允许使用。为什么C90不允许在printf中使用%lf?我可以使用%。16lf或%。16f并且两者都以相同的精度打印,那么在C90中导致%lf坏的问题是什么?

2 个答案:

答案 0 :(得分:9)

根据C90文件:

  

一个可选的l(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.   与任何其他转换说明符一起出现,行为是   未定义。

答案 1 :(得分:5)

C是一种不断发展的语言。每个新版本的C标准都会添加新的功能和行为。

C89表示l f导致未定义的行为。而C90可能也是如此。

另一方面,

C99表示l之前的f无效。