Как избавиться от предупреждения компилятора?

Модератор: Модераторы разделов

Ответить
MiK13
Сообщения: 1164
ОС: Linux Debian

Как избавиться от предупреждения компилятора?

Сообщение MiK13 »

Здравствуйте!
Люблю, когда компиляция программы происходит без каких либо сообщений.
Но однажды столкнулся с ситуацией, когда программу, созданную в 32-битном линуксе, стал транслировать в 64-битном.
При выводе размера переменной использовал спецификацию %d, но в 64-битном линуксе размер 8-байтный. Почитав man, понял, что надо использовать %zd. Всё стало хорошо.
Но потом встретился с другой проблемой. Нужно вывести значение 64-битной переменной, объявленной как int64_t В 32-битном линуксе это long long int, поэтому я использовал %lld, но в 64-бином это просто long int (так определено в <stdint.h>). В результате компилятор "ворчит"

Код: Выделить всё

aaa_rd.c: In function ‘main’:
aaa_rd.c:1033:15: warning: format ‘%lld’ expects argument of type ‘long long int’, but argument 2 has type ‘int64_t’ [-Wformat=]
               printf(" dd->freespace = %lld\n",dd->freespace);
               ^

Или единственный способ -- объявить поле freespace не int64_t, а long long int?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как избавиться от предупреждения компилятора?

Сообщение Bizdelnick »

В C99:

Код: Выделить всё

printf(" dd->freespace = %" PRId64 "\n", dd->freespace);

https://en.wikibooks.org/wiki/C_Programming...ence/inttypes.h
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
MiK13
Сообщения: 1164
ОС: Linux Debian

Re: Как избавиться от предупреждения компилятора?

Сообщение MiK13 »

Bizdelnick писал(а):
02.08.2016 17:13
В C99:

Код: Выделить всё

printf(" dd->freespace = %" PRId64 "\n", dd->freespace);

https://en.wikibooks.org/wiki/C_Programming...ence/inttypes.h

Спасибо, всё сработало.
Спасибо сказали:
Ответить