Спецификаторы формата для целых чисел фиксированной ширины? - PullRequest
3 голосов
/ 23 апреля 2009

Какие спецификаторы формата использовать для printf при работе с такими типами, как int32_t, uint16_t и int8_t и т. Д .?

Использование% d,% i и т. Д. Не приведет к переносимой программе. Является ли использование макросов PRIxx лучшим подходом?

Ответы [ 2 ]

3 голосов
/ 23 апреля 2009

Является ли использование макросов PRIxx лучшим подходом?

Насколько я знаю, да.

Редактировать: другое решение - привести к типу, который по крайней мере настолько же широк, как тот, который вы хотите напечатать. Например, int имеет ширину не менее 2 байтов, чтобы можно было печатать int16_t с printf("%d\n", (int)some_var).

0 голосов
/ 15 января 2015

Да, если вы используете новые типы, вам действительно следует использовать новые спецификаторы формата.

Это лучший способ сделать это, поскольку реализация уже выполнила основную работу по обеспечению правильности строк форматирования для типов.

Так, например:

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

int main (void) {
    int32_t i32 = 40000;
    printf ("%d\n", i32);            // might work.
    printf ("%" PRId32 "\n", i32);   // will work.
    return 0;
}

показывает оба способов сделать это.

Однако, на самом деле нет гарантии того, что первый будет работать так, как вы ожидаете. Например, в системе с 16-разрядными int типами вы можете получить другое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...