Ищите пояснения по использованию "zd" с printf().
Конечно, следующее верно для C99 и позже.
void print_size(size_t sz) {
printf("%zu\n", sz);
}
Спецификация C, кажется, позволяет printf("%zd\n", sz) зависимости от того, как он читается:
7.21.6.1 Функция fprintf
zУказывает, что следующий спецификатор преобразованияd,i,o,u,xилиXприменяется кsize_tили соответствующему аргументу целочисленного типа со знаком; или что следующий спецификатор преобразованияnприменяется к указателю на целочисленный тип соsize_tсоответствующий аргументуsize_t. C11dr §7.21.6.1 7
Должно ли это быть прочитано как
- "
zУказывает, что следующий спецификатор преобразованияd... применяется кsize_tили соответствующему аргументу соsize_tцелочисленного типа со знаком..." (оба типа) и "zУказывает, что следующий спецификатор преобразованияu... применяется кsize_tили соответствующий аргумент целочисленного типа со знаком... "(оба типа)
ИЛИ ЖЕ
- "
zуказывает, что следующий спецификатор преобразованияd... применяется к соответствующему аргументу со знаком целого типа со знаком..." (только со знаком типа) и "zуказывает, что следующий спецификатор преобразованияu... применяется кsize_t" (беззнаковый тип только).
Я использовал определение № 2, но теперь не уверен.
Что правильно, 1, 2 или что-то еще?
Если # 2 верно, то каков пример типа, который может использовать
"%zd"?