我是初学者编程学生,只是想了解这背后的原因。
当我使用此代码时:
#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坏的问题是什么?
答案 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
无效。