- 締切済み
sscanf() 関数の第 1 引数の型
カーニハン/リッチー・著,石田晴久・訳の「プログラミング言語 C・第 2 版」で,「付録 B」にある sscanf() 関数のプロトタイプが int sscanf(char *s, const char *format, ...) とあって,疑問に思いました。この第 1 引数の型は,「char *」ではなくで「const char *」のほうが合理的のように思えるのです。JIS X 3010-2003 では,const がついていましたし,さまざまな解説・マニュアルでも const つきで示されています。 そこで,ANSI C または JIS X3010-1993 の仕様書をお持ちの方,それらの仕様書の中で sscanf() 関数がどのようなプロトタイプを持っているか,ご教示願えませんでしょうか。ひょっとしたら本当に const がついていないのかもしれないし,書籍から何らかの理由で const が抜け落ちてしまったのかもしれません。 細かい点で恐縮ですが,ご回答くだされば幸いです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
> int sscanf(char *s, const char *format, ...) >とあって,疑問に思いました。 K&Rの本が書かれた頃は「const char *と言う書き方は存在しなかった」ので、constが付いてなくて当たり前です。この本が書かれた頃は「constなんて無かった」んですから。 ま、訳注として「現在の仕様では、第一引数はconst char *である」と追記してないのは不親切ですが。 >お尋ねしたいことは,この「const がついていない」ことに対して >「ANSI C または JIS X3010-1993 の仕様書・規格書ではどのように >書かれているか」 「constが付いている」と書かれています。 Cライブラリの仕様、C言語の仕様は「昔から、今の形になったのではなく、より合理的になるように進化して来た」のです。 >書籍から何らかの理由で const が抜け落ちてしまったのかもしれません。 「合理的な仕様が無かった時代の古文書」に「何かの理由で抜け落ちたのでは」と言いわれても困ります。 交通信号機が発明されてなかった時代の交通法規を持ち出して「赤信号では止まれ、と書いてない」と言われても困ります(笑)
- asuncion
- ベストアンサー率33% (2127/6289)
sscanf() の中で第1引数の内容を改変することはない、 という意味で、おっしゃるとおり const の付いている方が 合理的であろうと思います。 K&R の訳本に const が付いていない(私は原語本は未確認)のは、 「本に書いてあることがすべて正しいとは限らない」ということの 一例ではないでしょうか、たぶん。
補足
ご回答ありがとうございます。 ですが,お尋ねしたいことは,この「const がついていない」ことに対して,「ANSI C または JIS X3010-1993 の仕様書・規格書ではどのように書かれているか」です。これについてご存じはないでしょうか。
補足
恐れ入ります。しかし,わたしが参照したのは「第 2 版 ANSI 規格準拠」で,問題の sscnaf() 以外では,const がつくべき(といえばよいのでしょうか)箇所では const がついています。これは,ご回答の要旨と矛盾しますが,いかがでしょうか。