Люблю, когда компиляция программы происходит без каких либо сообщений.
Но однажды столкнулся с ситуацией, когда программу, созданную в 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?