如何使用带有extern常量的开关?

Rom*_*eno 11 c++ const extern switch-statement

一些code.cpp文件包含

extern const int v1;
extern const int v2;
extern const int v3;
extern const int v4;

int _tmain(int argc, _TCHAR* argv[])
{
    int aee = v1;
    switch (aee)
    {
    case v1:
        break;
    case v2:
        break;
    case v3:
        break;
    case v4:
        break;
    }
        return
}
Run Code Online (Sandbox Code Playgroud)

另一个文件definition.cpp包含

const int v1 = 1;
const int v2 = 2;
const int v3 = 3;
const int v4 = 4;
Run Code Online (Sandbox Code Playgroud)

当我编译时,我得到错误C2051:case表达式不是常数但是当我删除extern一切都很好.

有没有办法让它与extern一起工作?

Ben*_*oit 8

No. switch仅适用于完全定义的整数类型常量(包括枚举成员和明确转换为整数类型的类).是一个旧的MSDN引用的链接,但所说的仍然有效.

我在另一个答案的注释中提供的这个链接解释了编译器可能对汇编代码执行的优化.如果这延迟到链接步骤,那将是不可能的.

因此,您应该用if.. else if你的情况.