В чем разница между символами формата%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
,