Nella biblioteca FreeImagePlus, in FreeImage.h
, c'è un divertente #define
che sembra creare una typedef
e un enum
con lo stesso nome:Typedef e enum con lo stesso nome?
#define FI_ENUM(x) typedef int x; enum x
Questo si espande dal preprocessore di codice come:
typedef int FREE_IMAGE_FILTER;
enum FREE_IMAGE_FILTER {
FILTER_BOX = 0,
FILTER_BICUBIC = 1,
[...]
Cosa fa? È legale avere uno typedef
e uno enum
con lo stesso nome? E non è un enum
compatibile allo int
? Perché FreeImage fa questo?
Grazie, non conoscevo i namespace. Ancora, dove aiuta il "typedef int"? C'è qualche codice che si rompe senza di esso? – sleske
@sleske In generale non è necessario, si potrebbe anche fare 'typedef enum X {...} X;' A meno che non ci siano operazioni su variabili di tipo 'X' che non possono essere eseguite sui tipi di enumerazione. –