https://qiita.com/Nabetani/items/0554d5b040d70525ec95

これは何?

という記事で

c

int a;
a = 'c';

が問題なく動いている話や 素晴らしいコメント があって面白かったので、記事にしてみた。

それぞれの事情

C 言語の場合、そもそも 'c' の型が int である。 なので

c

int a;
a = 'c';

は、わりと面白くない。

Twitter 方面で、 'c' の型が int であることに疑問を抱いている方が散見されるので追記。

なぜそうなっているのかは知らないんだけど、C 言語では古来よりシングルクオートで囲まれたリテラルは int 型になっている。規格書にもそう書いてある。

古い C でも

c

printf( "sizeof('c') is %d\\n", (int)sizeof('c'));

のようにすると「sizeof('c') is 1」ではなく「sizeof('c') is 4」など(4 じゃないかも)となることから、 'c'char ではないことがわかる。'c'char だと思いこんでいる方は是非試してほしい。なお、C++ では 'c'char なので、C++ としてコンパイルしないように注意が必要。

それはともかく。実際問題、'c'char ではなく int だからといって sizeof に入れる以外の方法で違いがわかるパターンがないので、知っていても実用上嬉しいことは特に無い感じだった。C11 が出るまでは。 C11 で _Generics という新機能が入り、'c' が int だと知らないと引っかかる罠が発生した ので、注意が必要。

C++ / C# / D / Java