Как мне напечатать размер int в C? - PullRequest
17 голосов
/ 10 мая 2011

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

"var.c: 7: warning: format '% d' ожидает тип '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 "наследующий

  1. подписанный int n = 10;
  2. int n = 10;

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

Ответы [ 3 ]

42 голосов
/ 10 мая 2011

Функция 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 не может представлять самый большой объект для вашей среды, вам может даже понадобиться использовать long unsigned long cast и спецификатор %llu.

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

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

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

4 голосов
/ 10 мая 2011

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

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

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

0 голосов
/ 10 мая 2011

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

printf("The size of integer is %d\n", sizeof(int));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...