■
id:kikx:20061106
の続き
short x = 1; unsigned char y = 1; issigned(x) ==> 1 issigned(y) ==> 0
みたいに左辺値だったら、
int issigned_data = -1; #define issigned_char(x) ((&x)[(int)&issigned_data-(int)&x] < 0) #define issigned(x) (sizeof(x)==sizeof(char)? issigned_char(x): ...)
とかやって、左辺値をポインタにして、-1が詰まってるとこまで平行移動して、読んでやればテンポラリに保存しなくてもできるんだよな。