演算子の値は基本的にコンパイル時定数です。*1プリプロセス時定数ではありません。型が2バイトの環境にも対応しよう!」とか今時考えなくてもよさそうなことを考えて次のように書いてもコンパイルが通りません。defined.#endifプリプロセス処理は型の解析を行うよりも前に行われます。わからない文字列が書かれているのと同じです。ヘッダ)の中で定義されている定数を用います。これでうまくいくはずです。ファイル等によって各環境に則した定義を生成する方法も(主にLinuxなどで)よく用いられています。環境によって定義を変える必要があるようなコードを書かないのが一番ですけどね。コンパイル時にサイズが確定しない場合は実行時定数になります。