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 だと知らないと引っかかる罠が発生した ので、注意が必要。