LINUX.ORG.RU

История изменений

Исправление xaizek, (текущая версия) :

enum months это перечислимый тип. JAN, FEB, MAR это константы этого типа. var это переменная этого типа:

enum months var;

По идее, переменные этого типа не должны принимать значения, отличающиеся от этих констант и компилятор может эти ситуации отловить, если присваиваемое выражение имеет другой тип (также в switch по перечислению, в котором нету каких-то значений, компилятор может сообщить об этом). Но реальных ограничений тут нет и такие переменные могут содержать что-то вне области констант, GCC предполагает такой расклад:

int
func(enum months var)
{
    switch (var) {
        case JAN:
        case FEB:
        case MAR:
            return 0;
    };
    // GCC с соответствующими флагами требует return здесь и мы сюда попадём, если var не был инициализирован, например.
    return 1;
}

Исходная версия xaizek, :

enum months это перечислимый тип. JAN, FEB, MAR это константы этого типа. var это переменная этого типа:

enum months var;

По идее, переменные этого типа не должны принимать значения, отличающиеся от этих констант и компилятор может эти ситуации отловить, если присваиваемое выражение имеет другой тип (также в switch по перечислению, в котором нету каких-то значений, компилятор может сообщить об этом). Но реальных ограничений тут нет и такие переменные могут содержать что-то вне области констант, GCC предполагает такой расклад:

int
func(enum months var)
{
    switch (var) {
        case JAN:
        case FEB:
        case MAR:
            return 0;
    };
    // GCC требует return здесь и мы сюда попадём, если var не был инициализирован, например.
    return 1;
}