Trong thư viện FreeImagePlus, trong FreeImage.h
, có một hài hước #define
mà dường như để tạo ra một typedef
và một enum
có cùng tên:Typedef và enum có cùng tên?
#define FI_ENUM(x) typedef int x; enum x
này được mở rộng bằng vi xử lý mã như:
typedef int FREE_IMAGE_FILTER;
enum FREE_IMAGE_FILTER {
FILTER_BOX = 0,
FILTER_BICUBIC = 1,
[...]
Điều này làm gì? Thậm chí có hợp pháp để có một số typedef
và enum
có cùng tên không? Tuy nhiên, không phải là enum
tương thích với int
? Tại sao FreeImage làm điều này?
Cảm ơn, không biết về các không gian tên. Tuy nhiên, "typedef int" giúp đỡ ở đâu? Có mã nào bị vỡ mà không có nó? – sleske
@ sleske Nói chung nó không cần thiết, bạn cũng có thể làm 'typedef enum X {...} X;' Trừ khi có các phép toán trên các biến kiểu 'X' không thể thực hiện được trên các kiểu liệt kê. –