В библиотеке FreeImagePlus, в FreeImage.h
, есть забавный #define
, который, кажется, создает typedef
и enum
с таким же названием:Typedef и перечисление с таким же именем?
#define FI_ENUM(x) typedef int x; enum x
Это расширяется препроцессором код, как:
typedef int FREE_IMAGE_FILTER;
enum FREE_IMAGE_FILTER {
FILTER_BOX = 0,
FILTER_BICUBIC = 1,
[...]
Что это делает? Является ли законным иметь typedef
и одноименное имя enum
? И не является enum
совместимым с int
в любом случае? Почему FreeImage делает это?
Спасибо, не знали об пространствах имен. Тем не менее, где помогает «typedef int»? Есть ли какой-нибудь код, который не работает без него? – sleske
@sleske. В общем, это не нужно, вы также можете сделать 'typedef enum X {...} X;' Если не выполняются операции с переменными типа 'X', которые не могут быть выполнены для типов перечисления. –