Проверка переменной Enum на недопустимое значение в c ++ - PullRequest
2 голосов
/ 14 июля 2020

Рассмотрим следующий код.

//We use c++ version 98.

#include <iostream>

using namespace std;

//declaration of this enum type is in C header file.
typedef enum Color {
    Red=1, 
    Blue=11
} Color;

//Signature of this function can't be changed
int func(Color c){
    //Following line causes UndefinedBehaviour in clang++ if 
    //value is not a valid Color value
    return (int)c;
}

int main(){
    int x;
    cin >> x;
    cout << func((Color)x) << endl;
    return 0;
}

//Compilation:
//clang++ -fsanitize=undefined main.cpp

Теперь мы хотим проверить, действительно ли значение c в func, а также хотим избежать «неопределенного поведения». Но у нас нет никакого контроля над вызывающим func.

Обратите внимание , что объявление Color находится в заголовочном файле C.

...