В чем разница между символами формата%PRId и%d?

Рассмотрим следующий код:

#include <stdio.h>
#include <inttypes.h>

void main(void)
{
    int32_t a = 44;

    fprintf(stdout, "%d\n", a);
    fprintf(stdout, "%"PRId32"\n", a);
}

Когда лучше использовать %d и когда было бы лучше использовать "%"PRId32? Чем отличаются оба этих символа формата? Это как-то связано с тем, как int32_t typedeffed на вашем оборудовании / машине?

2 ответа

Решение

Использование %d за int а также PRId32 за int32_t,

Может быть, на вашей платформе int32_t это просто typedef для int но это не так в целом. Использование неправильного спецификатора вызывает неопределенное поведение, и его следует избегать.

Как отмечает @EricPostpischil, обратите внимание, что %d используется внутри строки формата в кавычках, в то время как PRId32 используется снаружи. Причина этого заключается в том, что PRId32 это макрос, который расширяется до строкового литерала и затем объединяется.

Тип int должен иметь по крайней мере 16 бит представления значения, хотя на большинстве настольных компьютеров и компиляторов он будет иметь 32 бита. Так int в целом может быть таким же, как int16_t, int32_t, int64_tили ничего из вышеперечисленного.

использование "%d" для переменных типа intи использовать "%" PRId32 для переменных типа int32_t,

Другие вопросы по тегам