Рассмотрим следующий код.
//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
.