Я хотел бы сделать следующее, но компилятору это не нравится:
unsigned short foo = 1;
// do something with foo
#if sizeof(short) * CHAR_BIT > 16
foo &= 0xffff;
#endif
Я знаю, что это выражение всегда можно полностью оценить во время компиляции, но, может быть, оно оценивается только после того, как препроцессор сделает свое дело? Возможно ли это в ANSI C или мне просто нужно выполнить проверку во время выполнения?
short
, а следуйте совету @larsmans и используйте соответствующий тип данных. Действительно правильным было быint_least16_t
для типа, который имеет по крайней мере 16 значащих битов. - person Jens Gustedt   schedule 26.07.2011