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

时间:2011-04-07 09:40:37

标签: c++ const switch-statement extern

某些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
}

另一个文件definition.cpp包含

const int v1 = 1;
const int v2 = 2;
const int v3 = 3;
const int v4 = 4;

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

有没有办法让它与extern合作?

2 个答案:

答案 0 :(得分:8)

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

我在另一个答案的评论中提供的

This link解释了编译器可能对汇编代码执行的优化。如果这被延迟到连接步骤,那将是不可能的。

因此,您应该在案件中使用if .. else if

答案 1 :(得分:3)

Switch语句要求在编译时知道案例值。

删除extern时,它似乎有用的原因是你定义了一个常数零。