2013-12-13 10 views

答えて

33

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); 

%mは、引数を必要としないことを注意

printf("%s\n", strerror (errno)); 

と同等です

printf("%s\n", strerror (errno), d); 

に相当します。ここではprintf("%m\n", d)printf("%s\n", strerror (errno), d)には必要以上の引数があります。printfに余分な引数がある場合、評価され無視されます。

+2

私は、最も興味深いのは、printfが各 '%m 'に対して追加のパラメータを必要としないということです。 – luiscubal

+0

@luiscubal私の編集を参照してください – ouah

+0

@大丈夫、ありがとう! – Manuel

関連する問題