#include<stdio.h>
main()
{
printf("% % % %");
}
对于上述程序,输出为%%。但为什么? (我使用gcc编译器。)
答案 0 :(得分:5)
未定义的行为。
N1570 7.21.6.1 fprintf函数在%
转换说明符的说明中说明:
完整的转换规范应为%%。
N1570 4.一致性说:
如果违反约束或运行时约束之外的''shall''或''shall not''要求,则行为未定义。
%
转换说明符的描述位于“描述”部分,不是约束,也不是运行时约束部分。
在实际实现中,系统的行为如下所示:
%
并开始解析说明符
并将其另存为国旗%
并将其视为%
转化说明符
并打印它,因为它不是说明符% %
并按照1-3 答案 1 :(得分:2)
这很有趣。不知何故%%计为%%,呵呵。必须在stdio库中的printf格式的解析规则中。通常,“%”并不完全是有效的格式规范。 %% %% %% %%可以满足您的需求。