「私は現在、職業訓練校にて勉強し始めた初心者です。」の回答への反論

アクセス解析を見ると、教えて!gooの「私は現在、職業訓練校にて勉強し始めた初心者です。」という質問の回答から当サイトへのリンクが貼られたようです。それ自体は何の問題もありませんが、回答が間違っているようです。間違った回答を補強してしまうとすれば、当サイトにも若干の責任がありますので、ここで反論しておきます。

C言語の厳密な仕様・規格等については詳しくありませんが、#1さんが
書かれているとおり、
  signed も unsigned も付けずに単に、char型として宣言した場合、
  符号付き(signed)となるか、符合無し(unsigned)となるかは、
  言語仕様としては【未定義】であり、
  その扱いは、処理系依存(コンパイラにより定義が異なる)
となるようです。(※下記参考サイト参照)

回答では上記のように記されています。字下げの部分はあたかも引用したように見えますが、当サイトも、もうひとつリンクを貼られたサイトにもこのような記述はなく、#1の回答にもこうした記述はありません。

signedもunsignedもつけないcharが符号付きであるか符号無しであるかは、未定義ではなく処理系定義です。「【未定義】であり、その扱いは、処理系依存」というのはおかしな表現です。「※下記参考サイト参照」とあるのが特にいただけません。

ついでにもう一箇所誤りを指摘すると、

ちなみに、char型を、8ビットの整数値とした場合、
  符号付き(signed)の値の範囲は、-128 〜 +127
となります。(※-127 〜 +127 ではありません。)

上記の箇所ですが、charが符号付きかつ8ビットの場合の表現範囲は、少なくとも-127〜+127です。1の補数表現や符号ビットと絶対値表現を用いる場合はもちろん、2の補数表現であっても、0x80がトラップ表現になる場合があるためです。もちろん、現存する処理系では、2の補数表現でトラップ表現無しと考えてほぼ間違いありませんので、現実的な理解としては-128〜+127でも問題はありません。

この記事のトラックバックURL:

http://www.kijineko.co.jp/trackback/722
このエントリーを含むはてなブックマーク