Ответ 1
В соответствии с этим ответом только clang поддерживает желаемое поведение.
Есть некоторые подходы для эмуляции строго типизированных перечислений в C, но они, похоже, имеют различные ограничения.
Пока я знаю, что это действительно C, чтобы не различать типы перечислений.
GCC имеет -Wenum-compare
(который я использую) и работает как ожидалось.
Я попытался использовать -Wconversion
, но это не имеет никакого значения.
Как задания и арифметические операторы (+
/-
/&
/|
... и т.д.) также генерируют предупреждения? (назначение, или и... и т.д.)
{
enum Foo f = SOME_VALUE;
enum Bar b = SOME_OTHER_VALUE;
if (f != b) {
/* this warns! */
}
f = b; /* <-- how to warn about this? */
f |= b; /* .. and this? */
}
Примечания:
В соответствии с этим ответом только clang поддерживает желаемое поведение.
Есть некоторые подходы для эмуляции строго типизированных перечислений в C, но они, похоже, имеют различные ограничения.