Ril*_*tut 5 c c++ enums typedef
在我的main.c文件中的方法中,我声明了变量irq_raised,它的类型为irq_type.我在另一个文件的typedef中定义了irq_type,并在main.c的顶部#import它.
typedef enum
{
IRQ_NONE = 0x0000,
IRQ_VBLANK = 0x0001,
IRQ_HBLANK = 0x0002,
IRQ_VCOUNT = 0x0004,
IRQ_TIMER0 = 0x0008,
IRQ_TIMER1 = 0x0010,
IRQ_TIMER2 = 0x0020,
IRQ_TIMER3 = 0x0040,
IRQ_SERIAL = 0x0080,
IRQ_DMA0 = 0x0100,
IRQ_DMA1 = 0x0200,
IRQ_DMA2 = 0x0400,
IRQ_DMA3 = 0x0800,
IRQ_KEYPAD = 0x1000,
IRQ_GAMEPAK = 0x2000,
} irq_type;
Run Code Online (Sandbox Code Playgroud)
我可以将此变量分配给其中一个,如下所示:
irq_raised = IRQ_NONE;
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试执行以下操作时:
irq_raised |= IRQ_HBLANK;
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Assigning to 'irq_type' from incompatible type 'int'
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
在C++中,如果没有强制转换,则无法将int直接赋值给枚举值.您正在执行的按位OR运算会产生一个int,然后您尝试将其分配给irq_type
没有强制转换的类型变量.这与你在这里遇到的问题是一样的:
irq_type irq = 0; // error
Run Code Online (Sandbox Code Playgroud)
您可以转换结果:
irq_type irq = IRQ_NONE;
irq = (irq_type)(irq | IRQ_HBLANK);
Run Code Online (Sandbox Code Playgroud)
规范中的相关信息:
枚举器可以提升为整数值.但是,将整数转换为枚举器需要显式强制转换,并且未定义结果.