每cppreference.com长度修饰符%L仅对浮点类型有效。但现代GNU编译器&库似乎也接受它作为%ll(long long)的同义词的整数。是否存在cppreference错误的可能性?或者整数的%L是否会成为未来的标准?
答案 0 :(得分:4)
从最新的C11草案N1570,§7.21.6.1第7节:
L
- 指定以下a
,A
,e
,E
,f
,F
,g
或G
转换说明符 适用于long double
参数。
因此,您的来源是正确的,L
作为长度修饰符仅为浮点转换定义。我不希望在未来版本中这会改变,因为根本没有必要。只需根据需要使用l
和ll
。
答案 1 :(得分:3)
有效长度修饰符列于C11标准的in §7.21.6.1 7。
标准中唯一提及L
作为长度修饰符的是long double
类型:
→ 指定跟随a,A,e,E,f,F,g或G转换说明符适用于long double参数。
此外,§7.31 Future Library Directions中没有提到这一点:
7.31.11输入/输出< stdio.h>
可以将1个小写字母添加到转换说明符和 fprintf和fscanf中的长度修饰符。可以使用其他字符 在扩展中。
2在文件位置的二进制流上使用ungetc 在通话之前,指标为零是一个过时的功能。
并且,the POSIX Standard L
中L
的使用方式相同:long double
是一个长度修饰符,仅用于function rotate($array, $new_array = array()) {
$sub_array = array_shift($array);
$sub_array['b'] = explode(',', $sub_array['b']);
$sub_array['c'] = explode(',', $sub_array['c']);
while($b = array_shift($sub_array['b'])) {
foreach($sub_array['c'] as $c) {
$new_array[] = array('a' => $sub_array['a'], 'b' => $b, 'c' => $c);
}
}
return $array ? rotate($array, $new_array) : $new_array;
}
$new_array = rotate($array);
类型。