sizeof
演算子の値は基本的にコンパイル時定数です。*1
プリプロセス時定数ではありません。
例えば「int
型が2バイトの環境にも対応しよう!」とか今時考えなくてもよさそうなことを考えて次のように書いてもコンパイルが通りません。
1 2 3 4 5 6 7 |
|
プリプロセス処理は型の解析を行うよりも前に行われます。
なので sizeof(int)
などと書かれていても、それは例えば abcxyz
だとかのよくわからない文字列が書かれているのと同じです。
ちなみに上述のような処理を実現するには climits ヘッダ(C言語では limits.h ヘッダ)の中で定義されている定数を用います。
1 2 3 4 5 6 7 8 9 |
|
int
型が2バイトの環境では INT_MAX == 0x7FFF
なのでこれでうまくいくはずです。
また、 configure ファイル等によって各環境に則した定義を生成する方法も(主にLinuxなどで)よく用いられています。
環境によって定義を変える必要があるようなコードを書かないのが一番ですけどね。