%m格式说明符的含义是什么?
此代码的输出打印出“成功”。
char d='w'; printf("%m\n", d);
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);
这相当于
printf("%s\n", strerror (errno));
请注意, %m
不需要参数。 这里printf("%m\n", d)
和printf("%s\n", strerror (errno), d)
有比所需更多的参数:对于printf
如果有额外的尾随参数,它们只是被评估和忽略。