Как напечатать размер int в C?

Я пытаюсь скомпилировать ниже на RHEL 5.6, 64 бит, и я продолжаю получать предупреждение

"var.c: 7: warning: format '% d ожидает type 'int, но аргумент 2 имеет тип 'Long unsigned int'

Вот мой код:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned int n =10;
    printf("The size of integer is %d\n", sizeof(n));
}

Не имеет значения, если я изменил объявление для "n" на следующий

  • подписанный int n = 10;
  • int n = 10;

Все, что я хочу сделать, это напечатать размер целого числа на моей машине, не глядя на лимиты. h.

Ответы

Ответ 1

Функция sizeof возвращает тип size_t. Попробуйте использовать %zu как спецификатор преобразования вместо %d.

printf("The size of integer is %zu\n", sizeof(n));

Чтобы уточнить, используйте %zu, если ваш компилятор поддерживает C99; в противном случае, или если вы хотите максимальной переносимости, лучший способ распечатать значение size_t - это преобразовать его на unsigned long и используйте %lu.

printf("The size of integer is %lu\n", (unsigned long)sizeof(n));

Причиной этого является то, что size_t гарантируется стандартом как неподписанный тип; однако стандарт не указывает, что он должен иметь какой-либо конкретный размер (достаточно большой, чтобы представлять размер любого объекта). Фактически, если unsigned long не может представлять самый большой объект для вашей среды, вам может понадобиться использовать беззнаковый длинный листинг и спецификатор %llu.

В C99 был добавлен модификатор длины z, чтобы указать способ, чтобы напечатанное значение представляло собой размер типа size_t. Используя %zu, вы указываете, что напечатанное значение представляет собой значение без знака size_t.

Это одна из тех вещей, где кажется, что вам не нужно думать об этом, но вы это делаете.

Дальнейшее чтение:

Ответ 2

Ваша проблема в том, что size_t является неподписанным типом. Попробуйте использовать

printf("The size of integer is %u\n", sizeof(n));

и вам следует избавиться от этого предупреждения.

Ответ 3

Я думаю, вы должны написать это вместо:

printf("The size of integer is %d\n", sizeof(int));