`l`长度修饰符对后续的a,A,e,E,f,F,g或G转换说明符没有影响

mal*_*lat 2 c printf c99 format-specifiers language-lawyer

我想了解以下部分:

l (ell)

用于指定后续的d,i,o,u,x,或X转换说明适用于一个longunsigned long参数; 以下n转换说明符适用于指向long 参数的指针; 以下c转换说明符适用于wint_t 参数; 以下s转换说明符适用于指向wchar_t参数的指针; 或具有在下文中没有任何影响a,A,e,E,f, F,g,或G转换说明.

我还可以看到这与cppreference一致:fprintf在哪里"%f""%lf"等同于printf()家庭.

那么,这个答案错误?或是否C99清楚,现在"%f"float,虽然"%lf"double针对printf()家庭功能?

das*_*ght 6

文档是正确的:printf看到float和之间没有区别double.

printf族的函数参数通过可变长度机制获得.在可变长度参数列表的可变长度部分中,"默认参数促销"适用:类型charshort int被提升为int,并float被提升为double.