Mon Sep 14 2009 10:45, Nickita A Startcev wrote to Kirill Frolov:
KF>> int16_t есть в ISO. Другое дело, что он, в общем-то скорей не нужен. KF>> Из имеющихся там типов полезными с ходу признать могу только KF>> int_fast*_t, int_least*_t и sig_atomic_t. Поддержка типов с конкретно KF>> заданной шириной (например int16_t) -- большой вопрос конкретному KF>> компилятору и CPU, и это скорей зло, нужное лишь в исключительных KF>> случаях. Вообще C он содержит много возможности "прострелить себе KF>> ногу", чем многие злоупотребляют, также и с самодельными типами.
NAS> Кстати, напомните плиз, а как эти типы выводить на печать и вводить с NAS> консоли? В смысле, что пихать в параметр для printf/scanf ( %i? %li? NAS> %lli? %llli?) или к какому из неизвестноширинных типов кастить?
К наиболее подходящему широкому. Это если по-простому. Если по-сложному, то существует возможность, в printf, задавать конкретные типы, какие есть в inttypes.h. Это чисто на макросах сделано, примерно вот так:
int16_t v=12345; printf("value=" PRId16 "\n", V);
Загляни в inttypes.h на линухе, для интереса. Hаличие форматов для printf оговорено в стандарте. Имеется ввиду, макросов для типов конкретной разрядности. В реальной жизни, ясно, оно сводится к каким-нибуфь %hd и т.п.