C90不允许在printf中使用%,为什么?
问题描述:
我是一名初学者编程的学生,只是想了解背后的原因。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有什么问题?
答
根据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 与任何其他转换说明符一起出现,则行为是 未定义。
答
C是一种不断发展的语言。 C标准的每个新版本都增加了新功能和行为。
C89说l
之前f
导致未定义的行为。而C90可能也是这样说的。
C99另一方面说l
之前f
没有效果。
因为直到后期才被标准化? – 2013-03-25 12:17:41
'%lf'对'printf'系列没有用处,只适用于'scanf'系列。 – 2013-03-25 12:20:45
可能的重复:http://stackoverflow.com/questions/6395726/how-does-printf-and-co-differentiate-beetween-float-and-double – 2013-03-25 12:22:57