Там нет ни одного. Однако существует надежный способ объявить отдельные целочисленные переменные размером до 32 бит, если вы готовы жить с некоторыми ограничениями. Просто используйте long
битовые поля (последние гарантированно должны иметь ширину не менее 32 бит, и вы можете использовать столько битов в битовых полях, сколько уместилось бы в переменной, если бы был опущен декларатор битового поля). Итак:
struct {
unsigned long foo : 32;
} bar;
Очевидно, что вы получаете все ограничения, которые идут с этим, такие как невозможность иметь указатели на такие переменные. Единственное, что действительно покупает вас, - это гарантированный перенос по указанной границе при переполнении / недостаточном заполнении, и даже в этом случае только для неподписанных типов, поскольку переполнение для знакового не определено.
Кроме этого, нет никакого портативного способа сделать это в чистом C90. Помимо прочего, для реализации C90, соответствующей требованиям, даже не нужно иметь 8-битное целое число - например, было бы вполне законно иметь платформу, в которой sizeof(char) == sizeof(short) == sizeof(int) == 1
и CHAR_BIT == 16
(т.е. она имеет 16-битное машинное слово, и не может адресовать отдельные байты). Я слышал, что такие платформы действительно существуют на практике в виде некоторых DSP.