Ответ 1
Цитирование непосредственно из C11
, главы §6.7.2.2
, Спецификаторы перечисления,
Каждый перечисленный тип должен быть совместим с
char
, целочисленным типом со знаком или беззнаковым целым типом. Выбор типа определяется реализацией.
Таким образом, тип переменной перечисления не определяется стандартом. Это может быть любой из вышеперечисленных.
OTOH, FOO
является константой перечисления, typeof(FOO)
даст вам int
, поскольку стандартные мандаты
Идентификатор, объявленный как константа перечисления, имеет тип
int
.
который используется как тип для f2
.
Теперь, если перечисление unsigned int
в вашей реализации, то есть f1
и f2
int
.
Затем вы получите предупреждение.
Как я могу исправить эту проблему?
Ну, если вы измените тип f2
на typeof(Baz)
, который задает тип перечисления, то оба типа f1
и f2
будут одинаковыми. Компилятор будет счастлив.