文字の宣言はint型?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

文字の宣言はint型?

#1

投稿記事 by amehirune » 9年前

お久しぶりになります、アメヒルネと申します。

つい最近、友達からこんな質問を受けました。
「今ではC言語で文字型変数をintで扱うって本当?」
その時はわけもわからず、「は?」と聞き返してしまったのですが、
後にその友達からある1冊の本を渡され、そこに書いてあったのが
「文字をcharで宣言するのはもう古い」との記述でした。

私は結構古めのC言語入門本で勉強したこともあり、そのようなことは全く知らなかったのです。
その記事の内容はよく覚えてないのですが、何故文字をintで宣言する必要があるのかがわかりません。
メモリの割り当てでいろいろと面倒なことが起きるとかそういうモノなのかな、とか思いましたが、
個人的には見返す時に変数の型名で、この変数が何を扱っているのかを分かりやすくなるので、
charはcharで宣言する方がいいような気がしています。

別にこれがわからないからどうとかいったことはありませんが、
単なる私の知的好奇心に応える意味で、どなたかご回答いただきたく思います。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

超初級者
記事: 56
登録日時: 9年前

Re: 文字の宣言はint型?

#2

投稿記事 by 超初級者 » 9年前

1文字を複数バイトで表わすことを
考慮してのことかな?

Aozora0630
記事: 85
登録日時: 9年前
住所: 日本
連絡を取る:

Re: 文字の宣言はint型?

#3

投稿記事 by Aozora0630 » 9年前

超初級者 さんが書きました:1文字を複数バイトで表わすことを
考慮してのことかな?
恐らくそうだと思います。
でもマルチバイト文字ならwchar型を使えばいいと思いますが・・・。

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: 文字の宣言はint型?

#4

投稿記事 by YuO » 9年前

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 “通常の取り扱いではないです”の前に“「古い」とするのは”を追加

アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

Re: 文字の宣言はint型?

#5

投稿記事 by amehirune » 9年前

返信遅れてしまい、申し訳ありません。
やっぱりそうだったんですね…
そのISO/IEC 9899:1990の時代というのはよくわかりませんが、たぶん最近のことだろうと思っておきます。
charをintで表すのは、簡潔にいえばエラー対策、ということだったんですね。
回答ありがとうございました。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

ISLe()

Re: 文字の宣言はint型?

#6

投稿記事 by ISLe() » 9年前

けっきょく「もう古い」の根拠は何ですかね。
amehirune さんが書きました:そのISO/IEC 9899:1990の時代というのはよくわかりませんが、たぶん最近のことだろうと思っておきます。
番号の最後に1990とありますから、1990年に公表された規格ということです。
25年前です。
ISO/IEC 9899:1990というのは、C言語の国際規格として『初』のものですね。

ということは
C言語で文字リテラルの型は「最初から」intであり
fgetcの戻り値をcharで受けるようなことは「最初から」間違っている
と考えるのが妥当ではないかと。

それ以外で文字をintで扱うのが良い(新しい?)場面というのが思い当たりません。

アバター
amehirune
記事: 181
登録日時: 10年前
住所: どっか
連絡を取る:

Re: 文字の宣言はint型?

#7

投稿記事 by amehirune » 9年前

ISLe() さんが書きました:けっきょく「もう古い」の根拠は何ですかね。
なんなんでしょうね(^^;

成程、もともとはintだったんですね。
それを、解説側が初心者にとって「わかりやすいように変形させた」ってことですかねぇ。
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※

たいちう
記事: 418
登録日時: 13年前

Re: 文字の宣言はint型?

#8

投稿記事 by たいちう » 9年前

著者が間違えている場合は論外なので、今は普通の著者を想定します。
(1)このような理由から、(2)こういう場合には、(3)これはこうすべきである。
というような事が書いてあったのではないでしょうか。

雑誌の記事の見出しなどが「これはこうすべきである」となっていることがよくあります。
著者は自分の記事を読んでほしいので、見出しをセンセーショナルなものにすることがあります。
一般的には「これはこうすべきでない」ということが常識とされているときに、
あえて「これはこうすべきである」という見出しを付けることもよくあります。
記事を読んだら「特殊な状況では一般的常識を無視すべきこともある」
といった程度の内容だったりします。

その場合、見出しだけを読んで『「これはこうすべきでない」というのはもう古いのだ、
今は「これはこうすべきである」が正しいんだ』と、見出しを鵜呑みにするのは間違いです。



> なんなんでしょうね(^^;

その本を読んだのはamehiruneさんでしょ。
どんな趣旨で書かれていたのか、読み直してはどうですか?
本の題名などを教えてくれないと、他の人は答えようがないと思いませんか?

閉鎖

“C言語何でも質問掲示板” へ戻る