1. ホーム
  2. c++

[解決済み] なぜC言語の文字リテラルはcharsでなくintsなのですか?

2022-11-05 04:05:31

質問

C++で sizeof('a') == sizeof(char) == 1 . これは直感的に理解できます。 'a' は文字リテラルであり sizeof(char) == 1 のように規格で定義されています。

しかし、C言語では sizeof('a') == sizeof(int) . つまり、Cの文字リテラルは実際には整数であるようです。なぜか知っている人はいますか?私はこの C の癖についての言及をたくさん見つけることができますが、なぜそれが存在するのかについての説明はありません。

どのように解決するのですか?

の議論 同じ話題

<ブロッククオート

"もっと具体的に言うと積分プロモーションです。K&R C では、事実上 (?) K&R C では、最初に int に昇格させることなく文字値を使用することは事実上不可能でした。 そのため、最初に文字定数を int にすることで、その手順を省くことができました。 昔も今も、'abcd'のような複数文字定数や、int型に収まる数の定数は存在します。 のような複数文字定数がありましたし、今もあります。