Я получаю следующее предупреждение при попытке скомпилировать код:Предупреждение о компиляции GCC: формат '% i' ожидает аргумент типа 'int *', но аргумент 2 имеет тип 'enum month *' [-Wformat]
program141.c: 13: 5: предупреждение: формат '% я' ожидает аргумент типа 'INT *', но аргумент 2 имеет тип "перечисление месяц * [-Wformat]
// Program to print the number of days in a month
#include <stdio.h>
int main (void)
{
enum month { january = 1, february, march, april, may, june,
july, august, september, october, november, december };
enum month aMonth;
int days;
printf ("Enter month number: ");
scanf ("%i", &aMonth);
switch (aMonth) {
case january:
case march:
case may:
case july:
case august:
case october:
case december:
days = 31;
break;
case april:
case june:
case september:
case november:
days = 30;
break;
case february:
days = 28;
break;
default:
printf ("bad month number\n");
days = 0;
break;
}
if (days != 0)
printf ("Number of days is %i\n", days);
if (aMonth == february)
printf ("...or 29 if it's a leap year\n");
return 0;
}
Этот код из книги, которую я читаю.
Как исправить это предупреждение?
Спасибо, это исправлено. –
работает только до тех пор, пока никто не компилируется с '-fshort-enums', который по умолчанию включен на некоторых платформах. – Christoph
Я согласен с Кристофом. Ранее ваш код предполагал, что enum является int, теперь он предполагает, что он является беззнаковым, но оба предположения нестабильны и не переносятся. Вы должны sscanf в int или unsigned, проверку диапазона, а затем назначьте перечисление. –