自分のためのメモです。
典拠はいちおう「プログラム言語C JIS X 3010:2003 (ISO/IEC 9899:1999)」です。(あまり厳密には読んでいないので、間違っている可能性あり)
constとは何か §
- 左辺値に書くことができない制約を付ける修飾語
- constant(定数)を連想させるconstキーワードを使うが、定数ではない。たとえば、const int a = 0;と書いた場合、0が格納されている変数aの実体は作成される。左辺値に書けないため、通常の方法では値を変更できないが、普通ではない方法を使えば値は変更できてしまう
- const int * pは、*pを左辺値に書けないポインタ変数を宣言する。pは左辺値に書ける
- int * const pは、pを左辺値に書けないポインタ変数を宣言する。*pは左辺値に書ける
- const int * const pは、p, *pの双方を左辺値に書けないポインタ変数を宣言する
enumとは何か §
- intと相互変換可能な定数値を定義する
- enum型として宣言した変数に整数を代入することは問題なく可能。その値がenum foo型で宣言されている値ではなくとも問題はない
- 整数として宣言した変数に、enum型の値を代入することは問題なく可能
- 列挙を連想させるenumキーワードを使うが、実質としては定数に近い。しかし、enum型で宣言された変数は整数型の変数に近い
- ただし、enum型はintと同じビット数の表現力を持つとは限らないので、任意の整数を入れてそれがそのまま取り出せるかは分からない
感想 §
自分の中でもやもやして的確な説明ができなかったので改めて調べてみると、かなりねじれていました。これは、もやもやして当然ですね。