Typedef和enum具有相同的名称?

sle*_*ske 6 c enums typedef freeimage

在FreeImagePlus库中FreeImage.h,有一个有趣的#define似乎创建了一个typedef和enum同名:

#define FI_ENUM(x)      typedef int x; enum x
Run Code Online (Sandbox Code Playgroud)

这由预处理器扩展为代码,如:

typedef int FREE_IMAGE_FILTER;
enum FREE_IMAGE_FILTER {
 FILTER_BOX = 0,
 FILTER_BICUBIC = 1,
[...]
Run Code Online (Sandbox Code Playgroud)

这是做什么的?拥有一个typedef和一个enum同名的合法是否合法?并且反正不enum兼容int?为什么FreeImage会这样做?

Som*_*ude 7

结构,联合和枚举的名称存在于它们自己的命名空间中.这就是为什么你可以声明一个与实际//同名的struct/ union/ enum变量.structunionenum

而且这不是完整的名称enum(如enum X我的意思X),这必须是一个整数兼容,它的名字里面枚举.