%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如果有额外的尾随参数,它们只是被评估和忽略。