【发布时间】:2010-12-24 14:34:15
【问题描述】:
我正在使用 MinGW GNU 编译器编写 C++,当我尝试在 switch 语句中使用外部定义的整数变量作为 case 时,就会出现问题。我收到以下编译器错误:“case label does not reduce to an integer constant”。
因为我已经将整数变量定义为 extern 我相信它应该编译,有谁知道问题可能是什么?
下面是一个例子:
test.cpp
#include <iostream>
#include "x_def.h"
int main()
{
std::cout << "Main Entered" << std::endl;
switch(0)
{
case test_int:
std::cout << "Case X" << std::endl;
break;
default:
std::cout << "Case Default" << std::endl;
break;
}
return 0;
}
x_def.h
extern const int test_int;
x_def.cpp
const int test_int = 0;
此代码将在 Visual C++ 2008 上正确编译。此外,我的一个蒙大拿州朋友检查了 ISO C++ 标准,似乎任何 const-integer 表达式都可以工作。这可能是编译器错误还是我遗漏了一些明显的东西?
这是我的编译器版本信息:
从 C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/specs 读取规范
配置:../gcc-3.4.5-20060117-3/configure --with-gcc --with-gnu-ld --with-gnu-as --host=mingw32 --target=mingw32 --prefix= /mingw --enable-threads --disable-nls --enable-languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable-shared --enable-sjlj-exceptions -- enable-libgcj --disable-java-awt --without-x --enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash-synchronization --enable-libstdcxx-debug
线程型号:win32
gcc 版本 3.4.5 (mingw-vista special r3)
【问题讨论】:
-
有趣:一个务实的和两个基于标准的答案,都来自具有> 5K代表的人,而基于标准的答案不同意。我认为该标准还不够清晰。
-
@David Thronley:这就是标准的乐趣:)。
-
我一直在试图确定您的朋友来自蒙大拿州的相关性。蒙大拿人以善于解释标准而闻名吗?
-
我认为要达到 C++ 标准,必须具备一定的铁石心肠和对枪支的熟悉。
-
为了清楚起见,您能否也显示您用于编译代码的命令行?