typedef enum tagGPFIDL_FLAGS
{
GPFIDL_DEFAULT = 0x0000, // normal Win32 file name, servers and drive roots included
GPFIDL_ALTNAME = 0x0001, // short file name
GPFIDL_UNCPRINTER = 0x0002, // include UNC printer names too (non file system item)
};
通过上面的typedef
定义枚举变量时,c++编译器会给出warning,这是因为即使没有提供一个别名,tagGPFIDL_FLAGS
枚举仍然是有效的,并且可以在代码中使用。在这种情况下,你需要使用其原始的枚举标签名tagGPFIDL_FLAGS
来引用它。例如:
enum tagGPFIDL_FLAGS myFlags;
// 设置 myFlags 为 GPFIDL_DEFAULT
myFlags = GPFIDL_DEFAULT;
// 检查 myFlags 是否设置了 GPFIDL_ALTNAME 标志
if (myFlags & GPFIDL_ALTNAME)
{
// 如果设置了,则执行相应操作
}
// 设置 myFlags 为多个标志的组合
myFlags = static_cast<enum tagGPFIDL_FLAGS>(GPFIDL_ALTNAME | GPFIDL_UNCPRINTER);
// 检查 myFlags 是否同时设置了 GPFIDL_ALTNAME 和 GPFIDL_UNCPRINTER 标志
if ((myFlags & GPFIDL_ALTNAME) && (myFlags & GPFIDL_UNCPRINTER))
{
// 如果两个标志都设置了,则执行相应操作
}
注意,当直接使用枚举标签名时,你必须在变量声明时以及在类型转换时使用完整的枚举标签名(如上面代码所示的enum tagGPFIDL_FLAGS
)。
不过,通常创建枚举时会提供一个别名,这样做的优点是能简化代码,增强可读性,并且让类型名称更容易记忆和使用。例如:
typedef enum tagGPFIDL_FLAGS
{
GPFIDL_DEFAULT = 0x0000,
GPFIDL_ALTNAME = 0x0001,
GPFIDL_UNCPRINTER = 0x0002,
} GPFIDL_FLAGS;
现在你就可以使用别名GPFIDL_FLAGS
替代冗长的enum tagGPFIDL_FLAGS
来声明变量和进行类型转换。