m
转换说明符不是C,而是printf
的GNU扩展:
来自GNU文档:
http://www.gnu.org/software/libc/manual/html_node/Other-Output-Conversions.html
"%m"转换打印与errno中的错误代码对应的字符串.查看错误消息.因此:
fprintf (stderr, "can't open `%s': %m\n", filename);
相当于:
fprintf (stderr, "can't open `%s': %s\n", filename, strerror (errno));
"%m"转换是GNU C库的扩展.
所以:
printf("%m\n", d);
相当于
printf("%s\n", strerror (errno), d);
which 相当于
printf("%s\n", strerror (errno));
请注意,%m
不需要参数.这里printf("%m\n", d)
和printf("%s\n", strerror (errno), d)
的参数比所需的多:printf
的参数如果有额外的尾随参数,它们只是被计算和忽略.