C++ todo

typedef

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来声明变量和进行类型转换。

你可能感兴趣的:(c++,开发语言)