Есть ли какой-либо c/c ++ компилятор, который может предупредить (или дать ошибку), или перечислимое преобразование в интервал?

Очищая старый c/c ++ код, который использовал hardcoded целочисленные литералы вместо перечислений, это утомительно для нахождения мест, где объявление функции было правильно пересмотрено, но не тело. например.

enum important {
  little = 1,
  abit = 2,
  much = 3
};

void blah(int e)
{
  // magic stuff here
}

void boing(int e) { ... }

void guck(important e)
{
  switch (e) {
    case 3:  // this would be a good place for a warning
      blah(e);  // and this
      break;
    default:
      boing((int)e); // but this is OK (although imperfect and a warning would be acceptable)
      break;
  }
}

Аннотирование/изменение каждого перечислимого типа или поиск кода для них также были бы изрядным объемом работы, поскольку существует очень очень много различных перечислений, таким образом, это не предпочтено, но могло быть приемлемым решением.

Мне не нужен он, чтобы быть в любом из наших основных компиляторов или других инструментов (gcc главным образом), или платформа (больше всего), выполняя его вручную пару раз была бы достаточно, но я предпочту что-то, что не является слишком тайным или дорогостоящим.

6
задан outis 18 January 2010 в 10:25
поделиться