お久しぶりになります、アメヒルネと申します。
つい最近、友達からこんな質問を受けました。
「今ではC言語で文字型変数をintで扱うって本当?」
その時はわけもわからず、「は?」と聞き返してしまったのですが、
後にその友達からある1冊の本を渡され、そこに書いてあったのが
「文字をcharで宣言するのはもう古い」との記述でした。
私は結構古めのC言語入門本で勉強したこともあり、そのようなことは全く知らなかったのです。
その記事の内容はよく覚えてないのですが、何故文字をintで宣言する必要があるのかがわかりません。
メモリの割り当てでいろいろと面倒なことが起きるとかそういうモノなのかな、とか思いましたが、
個人的には見返す時に変数の型名で、この変数が何を扱っているのかを分かりやすくなるので、
charはcharで宣言する方がいいような気がしています。
別にこれがわからないからどうとかいったことはありませんが、
単なる私の知的好奇心に応える意味で、どなたかご回答いただきたく思います。
文字の宣言はint型?
文字の宣言はint型?
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
-
- 記事: 85
- 登録日時: 9年前
- 住所: 日本
- 連絡を取る:
Re: 文字の宣言はint型?
恐らくそうだと思います。超初級者 さんが書きました:1文字を複数バイトで表わすことを
考慮してのことかな?
でもマルチバイト文字ならwchar型を使えばいいと思いますが・・・。
Re: 文字の宣言はint型?
これに関しては,正しいです。amehirune さんが書きました:「今ではC言語で文字型変数をintで扱うって本当?」
ANSI/ISO以前の正確な知識は無いですが,Cにおける'A'などの型は,少なくともISO/IEC 9899:1990の時代からint型です。
中途半端なバージョンではありますが,ISO/IEC 9899:1999から該当箇所を引用しますと,
とあります。6.4.4.4 Character constants
Description
2 An integer character constant is a sequence of one or more multibyte characters enclosed in single-quotes, as in 'x'.
Semantics
10 An integer character constant has type int.
C FAQ 8.9にも簡単ではありますが記述があります。
オフトピック
► スポイラーを表示
「古い」に関しては,根拠がわからないと判断つきかねますが,少なくとも「古い」とするのは通常の取り扱いではないです。amehirune さんが書きました:後にその友達からある1冊の本を渡され、そこに書いてあったのが
「文字をcharで宣言するのはもう古い」との記述でした。
あり得るとすれば,逆方向 (文字定数をcharにする) の修正ですが,互換性の都合上難しいでしょう。
関数の戻り値としてcharではなくintを使うことはあり得ます。
標準関数がそうですが,charとintの表せる範囲が異なる前提で,
charの範囲外の値をintが返すことによりエラーを表すことができるためです。
---- 修正履歴 ----
20150518T1315+0900 “通常の取り扱いではないです”の前に“「古い」とするのは”を追加
Re: 文字の宣言はint型?
返信遅れてしまい、申し訳ありません。
やっぱりそうだったんですね…
そのISO/IEC 9899:1990の時代というのはよくわかりませんが、たぶん最近のことだろうと思っておきます。
charをintで表すのは、簡潔にいえばエラー対策、ということだったんですね。
回答ありがとうございました。
やっぱりそうだったんですね…
そのISO/IEC 9899:1990の時代というのはよくわかりませんが、たぶん最近のことだろうと思っておきます。
charをintで表すのは、簡潔にいえばエラー対策、ということだったんですね。
回答ありがとうございました。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
Re: 文字の宣言はint型?
けっきょく「もう古い」の根拠は何ですかね。
25年前です。
ISO/IEC 9899:1990というのは、C言語の国際規格として『初』のものですね。
ということは
C言語で文字リテラルの型は「最初から」intであり
fgetcの戻り値をcharで受けるようなことは「最初から」間違っている
と考えるのが妥当ではないかと。
それ以外で文字をintで扱うのが良い(新しい?)場面というのが思い当たりません。
番号の最後に1990とありますから、1990年に公表された規格ということです。amehirune さんが書きました:そのISO/IEC 9899:1990の時代というのはよくわかりませんが、たぶん最近のことだろうと思っておきます。
25年前です。
ISO/IEC 9899:1990というのは、C言語の国際規格として『初』のものですね。
ということは
C言語で文字リテラルの型は「最初から」intであり
fgetcの戻り値をcharで受けるようなことは「最初から」間違っている
と考えるのが妥当ではないかと。
それ以外で文字をintで扱うのが良い(新しい?)場面というのが思い当たりません。
Re: 文字の宣言はint型?
なんなんでしょうね(^^;ISLe() さんが書きました:けっきょく「もう古い」の根拠は何ですかね。
成程、もともとはintだったんですね。
それを、解説側が初心者にとって「わかりやすいように変形させた」ってことですかねぇ。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
Re: 文字の宣言はint型?
著者が間違えている場合は論外なので、今は普通の著者を想定します。
(1)このような理由から、(2)こういう場合には、(3)これはこうすべきである。
というような事が書いてあったのではないでしょうか。
雑誌の記事の見出しなどが「これはこうすべきである」となっていることがよくあります。
著者は自分の記事を読んでほしいので、見出しをセンセーショナルなものにすることがあります。
一般的には「これはこうすべきでない」ということが常識とされているときに、
あえて「これはこうすべきである」という見出しを付けることもよくあります。
記事を読んだら「特殊な状況では一般的常識を無視すべきこともある」
といった程度の内容だったりします。
その場合、見出しだけを読んで『「これはこうすべきでない」というのはもう古いのだ、
今は「これはこうすべきである」が正しいんだ』と、見出しを鵜呑みにするのは間違いです。
> なんなんでしょうね(^^;
その本を読んだのはamehiruneさんでしょ。
どんな趣旨で書かれていたのか、読み直してはどうですか?
本の題名などを教えてくれないと、他の人は答えようがないと思いませんか?
(1)このような理由から、(2)こういう場合には、(3)これはこうすべきである。
というような事が書いてあったのではないでしょうか。
雑誌の記事の見出しなどが「これはこうすべきである」となっていることがよくあります。
著者は自分の記事を読んでほしいので、見出しをセンセーショナルなものにすることがあります。
一般的には「これはこうすべきでない」ということが常識とされているときに、
あえて「これはこうすべきである」という見出しを付けることもよくあります。
記事を読んだら「特殊な状況では一般的常識を無視すべきこともある」
といった程度の内容だったりします。
その場合、見出しだけを読んで『「これはこうすべきでない」というのはもう古いのだ、
今は「これはこうすべきである」が正しいんだ』と、見出しを鵜呑みにするのは間違いです。
> なんなんでしょうね(^^;
その本を読んだのはamehiruneさんでしょ。
どんな趣旨で書かれていたのか、読み直してはどうですか?
本の題名などを教えてくれないと、他の人は答えようがないと思いませんか?